【发布时间】:2023-01-09 07:26:06
【问题描述】:
我有一个名为 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
但是,如果 KPI 在 (1,2) 中,Value ='Y' AND (KPI=3 OR KPI=4)(至少两者之一),Value ='Y',那么如果我想将 Result=1 放入呢? ?
编辑 2: 抱歉,我试图简化数据集,以便更容易理解。因此,我有 n 个 DealerId,其中每个 KPI 总共有 14 个 KPI,而 Value 字段对于 14 个 KPI 中的每一个都可以是 Y(是)或 N(否)。我想要做的是有一个表,其中我有经销商 ID 和一个包含布尔值的结果字段,具体取决于 KPI 和值字段。如果 KPI 1、2、3、4、6、7、8、10、11、12、13、14 均为“Y”且其余 KPI(5 和 9)中至少有一个等于“,则结果为 1是的。这是一个例子
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 那么 Result=1
【问题讨论】:
-
您的
CASE表达式没有意义,因为它只会处理一一次排。不一行可以满足所有这些条件。请创建一个示例数据集,然后创建您期望从该示例中获得的结果。 -
编辑 2 的示例
-
DealerId, KPI的组合是唯一的吗?或者Dealer是否可以针对同一个KPI获得多个结果?如果是这样,如果经销商有 12 个Y对应一个KPI,或者一个Y和一个N对应同一个KPI,应该如何处理?
标签: sql sql-server group-by case