根据 SQL Server 2008R2 中 table 中的列获取计数
Get the count based on column in the table in SQL Server 2008R2
当右侧列的值大于 1 'Y' 时,需要从下面的示例 table.
中获取 ColumnName2
值
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
result/output应该是
ColumnName2
---------------
ROWNUMBER5
ROWNUMBER6
ROWNUMBER7
ROWNUMBER8
ROWNUMBER9
ROWNUMBER10
ROWNUMBER11
ROWNUMBER12
下面的查询将给出预期的结果。它实际上不是一个好的查询,实际的 table 有 39 行,所以下面的查询不会有帮助。请帮助我根据 table.
中的列获取计数
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')
一个选项是将列逆透视为行,然后聚合和过滤:
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
当右侧列的值大于 1 'Y' 时,需要从下面的示例 table.
中获取ColumnName2
值
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
result/output应该是
ColumnName2
---------------
ROWNUMBER5
ROWNUMBER6
ROWNUMBER7
ROWNUMBER8
ROWNUMBER9
ROWNUMBER10
ROWNUMBER11
ROWNUMBER12
下面的查询将给出预期的结果。它实际上不是一个好的查询,实际的 table 有 39 行,所以下面的查询不会有帮助。请帮助我根据 table.
中的列获取计数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')
一个选项是将列逆透视为行,然后聚合和过滤:
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