2016-09-12 4 views
2

У меня есть таблица, чтобы представить в моем приложении, и то, что я хочу представить таблицу, в которой одна строке имеет значение, рассчитанное следующие:SQL запрос с несколькими ВЫБРАТЬ

SELECT SUM (val) FROM report_orbiting_vals rov 
    WHERE rov.orbiting_group_type_id = ? AND rov.orbiting_group_indice_id = ? 

Для первой строки, которые я хочу настоящие 4 значения, каждый из них будет выглядеть:

SELECT SUM (val) FROM report_orbiting_vals rov 
    WHERE rov.orbiting_group_type_id = (1,2,3,4) AND rov.orbiting_group_indice_id = 1 

Где (1,2,3,4) 4 различных ЗЕЬЕСТ с (1,2,3,4) значениями соответственно. В следующей строке я изменю rov.orbiting_group_indice_id = 2 и захочу использовать те же значения rov.orbiting_group_type_id (1,2,3,4).

Im new at SQL, и я хочу спросить, как представить таблицу с этим valeus?
Значит, это должно быть что-то вроде значения column1-value, column2-value, column3-value, column4-value.

Спасибо!

Обновлено: Я хочу что-то вроде следующего:

SELECT 
    (SELECT 
     SUM(val) 
    FROM 
     report_orbiting_vals rov 
    WHERE 
     rov.orbiting_group_type_id = 1 
    AND rov.orbiting_group_indice_id = 1) as colOne, 
(SELECT 
     SUM(val) 
    FROM 
     report_orbiting_vals rov 
    WHERE 
     rov.orbiting_group_type_id = 1 
    AND rov.orbiting_group_indice_id = 2) as colTwo, 
(SELECT 
     SUM(val) 
    FROM 
     report_orbiting_vals rov 
    WHERE 
     rov.orbiting_group_type_id = 1 
    AND rov.orbiting_group_indice_id = 3) as colThree, 
(SELECT 
     SUM(val) 
    FROM 
     report_orbiting_vals rov 
    WHERE 
     rov.orbiting_group_type_id = 1 
    AND rov.orbiting_group_indice_id = 4) as colFourth 

К сожалению, приведенный выше код не работает, это приводит к ошибке, но я надеюсь, вы понимаете, что я хочу сейчас.

обновление (2):

Я попробовал 2 решения указанных ниже, первый:

SELECT 
(SELECT 
SUM(val) 
FROM 
report_orbitings rov 
WHERE 
rov.orbiting_group_type_id = 1 
AND rov.orbiting_group_indice_id = 1) as colOne, 
(SELECT 
SUM(val) 
FROM 
report_orbitings rov 
WHERE 
rov.orbiting_group_type_id = 1 
AND rov.orbiting_group_indice_id = 2) as colTwo, 
(SELECT 
SUM(val) 
FROM 
report_orbitings rov 
WHERE 
rov.orbiting_group_type_id = 1 
AND rov.orbiting_group_indice_id = 3) as colThree, 
(SELECT 
SUM(val) 
FROM 
report_orbitings rov 
WHERE 
rov.orbiting_group_type_id = 1 
AND rov.orbiting_group_indice_id = 4) as colFourth 
FROM report_orbitings rv 

Выход:

enter image description here

В то время как вторая:

SELECT SUM(CASE WHEN rov.orbiting_group_type_id = 1 THEN val ELSE 0 END) as type1_sum, 
SUM(CASE WHEN rov.orbiting_group_type_id = 2 THEN val ELSE 0 END) as type2_sum, 
SUM(CASE WHEN rov.orbiting_group_type_id = 3 THEN val ELSE 0 END) as type3_sum, 
SUM(CASE WHEN rov.orbiting_group_type_id = 4 THEN val ELSE 0 END) as type4_sum 
FROM report_orbitings rov 
WHERE rov.orbiting_group_type_id in (1,2,3,4) 
AND rov.orbiting_group_indice_id = 1 

Выход:

enter image description here

Чтобы быть ясно, я хочу признать, что база мои данные не имеют данных еще, просто структура. Тем не менее, я полагаю, что второй код работает, а первый нет, потому что он выводит [Null] вместо ничего. Почему в этих двух примерах есть разница? Он должен производить идентичный вывод.

ответ

4

Не уверен, что я следовал, или вы хотите, общая сумма их, то вам необходимо использовать IN():

SELECT SUM (val) FROM report_orbiting_vals rov 
WHERE rov.orbiting_group_type_id in (1,2,3,4) 
    AND rov.orbiting_group_indice_id = 1 

Или вы хотите, сумма каждого из них в другой колонке:

SELECT SUM(CASE WHEN rov.orbiting_group_type_id = 1 THEN val ELSE 0 END) as type1_sum, 
     SUM(CASE WHEN rov.orbiting_group_type_id = 2 THEN val ELSE 0 END) as type2_sum, 
     SUM(CASE WHEN rov.orbiting_group_type_id = 3 THEN val ELSE 0 END) as type3_sum, 
     SUM(CASE WHEN rov.orbiting_group_type_id = 4 THEN val ELSE 0 END) as type4_sum 
FROM report_orbiting_vals rov 
WHERE rov.orbiting_group_type_id in (1,2,3,4) 
    AND rov.orbiting_group_indice_id = 1 
+0

спасибо, я много не сделать себе ясно, я хочу, чтобы каждый выбрать из вашего вопроса будет SELECT SUM (val) FROM report_orbiting_vals rov WHERE rov.orbiting_group_type_id = AND rov.orbiting_group_indice_id = 1, следующий SELECT SUM (val) FROM report_orbiting_vals rov WHERE rov.orbiting_group_type_id = 2 И rov.orbiting_group_indice_id = 1, следующий один 3, последний 4. –

+0

@EvgeniyKleban Это то, что мой запрос делает, он вернет результат в каждом столбце. – sagi

+0

спасибо, но не могли бы вы объяснить значение WHERE rov.orbiting_group_type_id в (1,2,3,4)?Разве это не обязательно, когда мы объясняем эти значения в запросах? –

1

Может быть, вам это нужно:

SELECT 
    (SELECT SUM(val) FROM report_orbiting_vals rov 
    WHERE rov.orbiting_group_type_id = rv.orbiting_group_type_id 
    AND rov.orbiting_group_indice_id = 1) as colOne, 
    (SELECT SUM(val) FROM report_orbiting_vals rov 
    WHERE rov.orbiting_group_type_id = rv.orbiting_group_type_id 
    AND rov.orbiting_group_indice_id = 2) as colTwo, 
    (SELECT SUM(val) FROM report_orbiting_vals rov 
    WHERE rov.orbiting_group_type_id = rv.orbiting_group_type_id 
    AND rov.orbiting_group_indice_id = 3) as colThree, 
    (SELECT SUM(val) FROM report_orbiting_vals rov 
    WHERE rov.orbiting_group_type_id = rv.orbiting_group_type_id 
    AND rov.orbiting_group_indice_id = 4) as colFourth, 
    rv.orbiting_group_type_id 
FROM report_orbiting_vals rv 
+0

Благодарю вас, ваш asnwer верен, но не могли бы вы объяснить, почему мой обновленный код не работает? Я думаю, он идентичен вашему решению. –

+0

См. Последнюю строку в моем запросе - ваш обновленный код не имеет второго 'FROM report_orbiting_vals'. – i486

+0

Ничего себе, это 4 лишних выбора! – sagi