我有一个名为DMIntegration的表,它包含许多dealerId:
DealerId | KPI | Value
----------------------------
001 1 Y
001 2 Y
001 3 Y
001 4 Y
002 1 Y
002 2 Y
002 3 N
002 4 Y
我想得到的是按DealerId分组,如果KPI值都是Y,则为1,否则为0。我如何基于多行指定1或0?在这种情况下,它将是:
DealerId | Result
--------------------
001 1
002 0
这是我的想法,但我不知道如何为所有KPI设置值:
SELECT
DealerId
,CASE WHEN
(Value='Y' and KPI=1) AND
(Value='Y' and KPI=2) AND
(Value='Y' and KPI=3) AND
(Value='Y' and KPI=4) AND
THEN 1
ELSE 0
END AS Result
FROM DMIntegration
group by DealerId
编辑:在这种情况下,我决心这样做,因为你们中的一些建议:
Select DealerId
,Result = min(case when Value = 'Y' then 1 else 0 end)
From DMIntegration
Group By DealerID
但如果我想把结果= 1,如果KPI在(1,2)与值='Y '和(KPI = 3或KPI = 4)(至少两者之一)?
编辑2:抱歉,我试图简化数据集,使其更易于理解。因此,我有n个DealerId,每个DealerId总共有14个KPI,值字段可以为Y(是)或否(否)。我想要做的是创建一个表,其中包含经销商ID和一个"结果"字段,该字段包含取决于KPI和"值"字段的布尔值。如果KPI 1、2、3、4、6、7、8、10、11、12、13、14均为"Y",并且其余KPI(5和9)中至少有一个等于"Y"。下面是一个示例
DealerId | KPI | Value
----------------------------
001 1 Y
001 2 Y
001 3 Y
001 4 Y
001 5 N
001 6 Y
001 7 Y
001 8 Y
001 9 N
001 10 Y
001 11 Y
001 12 Y
001 13 Y
001 14 Y
在本例中,我有表
DealerId Result
-----------------------------
001 0
因为5和9为N。如果只有5或9为Y,则结果= 1
2条答案
按热度按时间f0brbegy1#
尝试此解决方案:
https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=fb993eabdd7a17ff9d4e3cb138b04cb6
或者,一个*稍微更一般化的版本...
KPI
与一个group
匹配group
必须至少有1个KPI
,其中value
等于Y
(1, 2, 3, 4, 6, 7, 8, 10, 11, 12, 13, 14)
都在自己的组中(它们都需要是Y
)(5, 9)
都在组5中(其中一个需要是Y
)创建条件Map...
所以连接和计数是不同的...
https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=e4bdf712bc098385b75d16a6c0717186
e0uiprwp2#
或者...