2016-08-10 2 views
1

Я пытаюсь запрос к базе данных, чтобы получить три колонкиКак установить имя столбца в запросе UNION ALL?

(SELECT SUM(result_enum) AS Positive FROM result WHERE result_enum > 0) 
    UNION ALL 
(SELECT SUM(result_enum) AS Negative FROM result WHERE result_enum < 0) 
    UNION ALL 
(SELECT SUM(result_enum) AS Neutral FROM result WHERE result_enum = 0) 

но получить результат в одной колонке:

enter image description here

Как сделать запрос к базе данных. Если это невозможно, могу ли я быть уверенным, что результат запроса будет в том же порядке, в котором я спросил его в запросе?

Спасибо!

+1

действительно ли имеет значение, что это 3x1 вместо 1x3 ?? – e4c5

+0

Последний выбор можно упростить до «SELECT 0», поскольку результат суммирования всех значений, равных 0, всегда будет равен нулю. – PaulF

ответ

1

В одной колонке это не представляется возможным, вам нужны три отдельные колонки для каждого типа

SELECT SUM(CASE WHEN result_enum > 0 THEN result_enum ELSE 0 END) AS Positive, 
     SUM(CASE WHEN result_enum < 0 THEN result_enum ELSE 0 END) AS Negative, 
     0 AS Neutral 
FROM TableName 
+1

Последняя сумма не требуется - она ​​всегда будет равна нулю. – PaulF

+0

Ха-ха-ха, ваши права Thx –

+0

@PaulF Я упростил запрос, чтобы показать проблему, с которой я столкнулся. – Roman

0

Вы действительно надеетесь группы сложений в result_enum колонки в соответствии с его sign:

SELECT SIGN(result_enum), SUM(result_enum) FROM result GROUP BY 1 

Это даст:

 
+-------------------+------------------+ 
| SIGN(result_enum) | SUM(result_enum) | 
+-------------------+------------------+ 
|    -1 |    -3 | -- sign of -1 => "Negative" 
|     0 |    0 | -- sign of 0 => "Neutral" 
|     1 |    9 | -- sign of +1 => "Positive" 
+-------------------+------------------+ 
+0

Я упростил запрос, чтобы показать проблему, с которой столкнулся – Roman

+0

@Roman: Где вы это сделали? Вы не отредактировали свой вопрос. – eggyal

+0

Нет, я не редактировал свой вопрос – Roman

Смежные вопросы