【问题标题】:Get the count based on column in the table in SQL Server 2008R2根据 SQL Server 2008R2 中表中的列获取计数
【发布时间】:2020-10-31 08:33:45
【问题描述】:

当右列具有 > 1 'Y' 值时,需要从下面的示例表中获取 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

结果/输出应该是

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')

【问题讨论】:

    标签: sql sql-server tsql sql-server-2008-r2 unpivot


    【解决方案1】:

    一种选择是将列转为行,然后聚合和过滤:

    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
    

    【讨论】:

    • 它有帮助。再进行一次查询,我们将能够在单个查询中获得值为“Y”的每一列的计数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多