【问题标题】:Aggregating BIT values into a single row将 BIT 值聚合到单行中
【发布时间】:2015-11-26 12:11:20
【问题描述】:

SQL tableA 有 4 行数据,3 列。

预期结果是:

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

从给定的例子:

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

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

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

注意:我使用的是 BIT Values ,因此MAXSUM 无法按照下面给出的答案工作。

【问题讨论】:

  • 从表中选择 max(c1), max(c2), max(c3)
  • 那么该列是否需要至少 2 个 TRUE 值才能在聚合结果中显示 TRUE?您声明::在 SectorTestRequiured 中有两个 TRUE 值列
  • 至少一列真值就足够了。 & 它是一个位值字段。那么 Max , SUM 将被应用?

标签: sql sql-server


【解决方案1】:

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

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>

【讨论】:

  • 如果基础数据类型为 BIT (TRUE/FALSE),SUM 将无法在没有转换/转换的情况下工作
  • 操作数数据类型位对于求和运算符无效。由于 BIT 运算符。
  • @Tanner 你是对的,谢谢。答案已被编辑。
  • @Vinod 这是我根据 Tanner 的建议解决的选角问题
【解决方案2】:

我理解您的问题是要求列具有 2 个 TRUE 值才能在聚合结果中输出 TRUE 值,因此我 COUNT TRUE 值并使用 CASE WHEN 输出 10 取决于计数为&gt;=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

【讨论】:

    猜你喜欢
    • 2020-07-01
    • 1970-01-01
    • 2016-09-02
    • 2022-07-27
    • 2012-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多