SQL tableA有4行数据,有3列。
预期结果是:
预期逻辑是:在SectorTestRequiured中有两个TRUE值列数据,因此预期为TRUE。 (如果更改一列值为true,则预期o / p应为真)
从给定的例子:
SectorDetailsRequired列具有所有零值行,因此预期o / p为FALSE。
SectorTestRequired有一个或多个True值列数据,因此o / p为TRUE。
OtherInfoRequired将所有列数据都设为True,因此o / p为TRUE。
注意:我使用的是BIT值,因此MAX
,SUM
将无法按照以下答案中的规定运行。
答案 0 :(得分:1)
我已经理解您的问题是要求列具有2个TRUE值,以便在汇总结果中输出TRUE值,因此我COUNT
TRUE
值并使用CASE WHEN
输出1
或0
,具体取决于计数>=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>