将BIT值聚合为一行

时间:2015-09-01 09:50:06

标签: sql sql-server

SQL tableA有4行数据,有3列。

enter image description here

预期结果是:

enter image description here

预期逻辑是:在SectorTestRequiured中有两个TRUE值列数据,因此预期为TRUE。 (如果更改一列值为true,则预期o / p应为真)

从给定的例子:

SectorDetailsRequired列具有所有零值行,因此预期o / p为FALSE。

SectorTestRequired有一个或多个True值列数据,因此o / p为TRUE。

OtherInfoRequired将所有列数据都设为True,因此o / p为TRUE。

注意:我使用的是BIT值,因此MAXSUM将无法按照以下答案中的规定运行。

2 个答案:

答案 0 :(得分:1)

我已经理解您的问题是要求列具有2个TRUE值,以便在汇总结果中输出TRUE值,因此我COUNT TRUE值并使用CASE WHEN输出10,具体取决于计数>=2

CREATE TABLE #tmp
    (
      SectorDetailsRequired BIT ,
      SectorTestRequired BIT ,
      OtherInfoRequired BIT
    )

INSERT  INTO #tmp
        ( SectorDetailsRequired, SectorTestRequired, OtherInfoRequired )
VALUES  ( 0, 1, 1 ),
        ( 0, 1, 1 ),
        ( 0, 0, 1 ),
        ( 0, 0, 1 )

SELECT  CASE WHEN COUNT(NULLIF(SectorDetailsRequired, 0)) >= 2 THEN 1
             ELSE 0
        END SectorDetailsRequired ,
        CASE WHEN COUNT(NULLIF(SectorTestRequired, 0)) >= 2 THEN 1
             ELSE 0
        END SectorTestRequired ,
        CASE WHEN COUNT(NULLIF(OtherInfoRequired, 0)) >= 2 THEN 1
             ELSE 0
        END OtherInfoRequired
FROM    #tmp

DROP TABLE #tmp

<强>输出:

SectorDetailsRequired   SectorTestRequired  OtherInfoRequired
0                       1                   1

答案 1 :(得分:0)

根据您需要的总和来对列进行求和并应用逻辑。我不确定我是否正确地解释了你的要求,但是这应该能给你一个线索:

SELECT
   CASE SUM(CAST(SectorDetailsRequired AS int)) WHEN 0 THEN 0 ELSE 1 END AS SectorDetailsRequired,
   CASE SUM(CAST(SectorTestRequired AS int)) WHEN >= 1 THEN 1 ELSE 0 END AS SectorTestRequired,
   CASE SUM(CAST(OtherInfoRequested AS int)) WHEN 4 THEN 1 ELSE 0 AS END OtherInfoRequested
FROM <your table>