2015-12-08 4 views
0

Представьте, у меня есть столбец с данными строки A, B, и C. Когда агрегирование столбца, я хочу Б, чтобы показать, если любая строка содержит B, C, остальной остальное A.динамический выбор в SQL агрегатной функции

Возможно ли это? Я использую Vertica, но было бы интересно услышать решения для других хранилищ данных.

+------+-------+ 
| Col1 | Col 2 | 
+------+-------+ 
| A | X | 
| B | X | 
| C | X | 
+------+-------+ 

SELECT ???(Col1), Col2 
FROM my_two_column_table 
GROUP BY Col2 

ожидаемый результат: одна строка - В, X

+0

Попробуйте написать обычный запрос, в котором есть столбец, который ведет себя так, как вы описываете («Я хочу, чтобы B отображался, если какая-либо строка содержит B, иначе C, else A»). Тогда легко написать совокупность. Как написано, это не очень конкретное описание того, что вы ищете, но похоже, что вы ищете функцию COALESCE(). Кроме того, вам действительно нужно будет опубликовать данные примера и опубликовать то, что у вас есть, и почему оно не работает. StackOverflow не является сервисом написания кода yadda yadda. –

+0

Не могли бы вы продемонстрировать нам результат с помощью некоторой таблицы ascii? У вас [здесь] (https://ozh.github.io/ascii-tables/) – FiN

ответ

2

Нечто подобное может работать:

SELECT COALESCE(MAX(t2.value), MAX(t3.value), MAX(t4.value)) 
FROM my_table t1 
LEFT OUTER JOIN my_table t2 ON t2.value = 'B' 
LEFT OUTER JOIN my_table t3 ON t3.value = 'C' 
LEFT OUTER JOIN my_table t4 ON t4.value = 'A' 
WHERE t1.value in ('A', 'B', 'C') 

В таблице t1 также может быть заменен dual или каким-либо фиктивной таблицы, по крайней мере, один у вас есть.

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