Получите количество на основе столбца в таблице в SQL Server 2008R2 - PullRequest
0 голосов
/ 10 июля 2020

Необходимо получить значения ColumnName2, если в правом столбце указано значение> 1 'Y' из приведенной ниже примерной таблицы.

ColumnName1 ColumnName2     ColumnName3 ColumnName4 ColumnName5 ColumnName6
----------- --------------- ----------- ----------- ----------- -----------
1           ROWNUMBER1      Y           NULL        NULL        NULL
2           ROWNUMBER2      NULL        Y           NULL        NULL
3           ROWNUMBER3      NULL        NULL        Y           NULL
4           ROWNUMBER4      NULL        NULL        NULL        Y
5           ROWNUMBER5      Y           Y           NULL        NULL
6           ROWNUMBER6      NULL        Y           Y           NULL
7           ROWNUMBER7      NULL        NULL        Y           Y
8           ROWNUMBER8      Y           NULL        NULL        Y
9           ROWNUMBER9      Y           Y           Y           NULL
10          ROWNUMBER10     NULL        Y           Y           Y
11          ROWNUMBER11     Y           NULL        Y           Y
12          ROWNUMBER12     Y           Y           NULL        Y

Результат / вывод должен быть

ColumnName2
---------------
ROWNUMBER5
ROWNUMBER6
ROWNUMBER7
ROWNUMBER8
ROWNUMBER9
ROWNUMBER10
ROWNUMBER11
ROWNUMBER12

Запрос ниже даст ожидаемый результат. На самом деле это не очень хороший запрос, а фактическая таблица имеет 39 строк, поэтому приведенный ниже запрос не поможет. Пожалуйста, помогите мне получить количество на основе столбца в таблице.

SELECT ColumnName2
FROM TableName
WHERE ColumnName3 = 'Y' AND (ColumnName4 = 'Y' OR ColumnName5 = 'Y' OR  ColumnName6 = 'Y')
OR ColumnName4 = 'Y' AND (ColumnName3 = 'Y' OR ColumnName5 = 'Y' OR  ColumnName6 = 'Y')
OR ColumnName5 = 'Y' AND (ColumnName3 = 'Y' OR ColumnName4 = 'Y' OR  ColumnName6 = 'Y')
OR ColumnName6 = 'Y' AND (ColumnName3 = 'Y' OR ColumnName4 = 'Y' OR  ColumnName5 = 'Y')

1 Ответ

1 голос
/ 10 июля 2020

Один из вариантов - преобразовать столбцы в строки, затем агрегировать и фильтровать:

select t.columnname2
from tablename t
cross apply (values (columnname3), (columnname4), (columnname5), (columnname6)) as x(columnname)
group by t.columnname2
having sum(case when x.columnname = 'Y' then 1 else 0 end) > 1
...