我必须区分组中的不同值,我该如何执行? 我的表格示例:
Person Status
1 Y
2 N
3 Y
3 N
- 如果某人只有Y
状态,则显示Yes
- 如果某人只有N
状态,则显示No
- 如果某人同时拥有Y
和N
状态,则会显示No
结果:
Person Status
1 Yes
2 No
3 No
当一个人同时具有两种状态时,如何执行最后一次逻辑?这是我尝试过的有效的陈述,但我不能100%确定它是否准确:
CASE WHEN SUM(CASE WHEN Status = 'Y' THEN 1 ELSE 0 END)>=1 AND SUM(CASE WHEN Status = 'N' THEN 1 ELSE 0 END)>=1 THEN 'No'
WHEN SUM(CASE WHEN Status = 'Y' THEN 1 ELSE 0 END)>=1 THEN 'Yes'
ELSE 'No'END
答案 0 :(得分:1)
你可以使用MIN:
# Computation
答案 1 :(得分:0)
为简单起见,我们说:
(Y) -> SUM(CASE WHEN Status = 'Y' THEN 1 ELSE 0 END)
(N) -> SUM(CASE WHEN Status = 'N' THEN 1 ELSE 0 END)
因此您的查询可以写为伪代码:
case when (Y)>=1 and (N)>=1 then 'No'
when (Y)>=1 then 'Yes'
else 'No'
end
检查您的查询是否正确您需要从查询中为所有可能的输入构建一个真值表:
(Y) | (N) (Y)>=1 | (N)>=1 (Y)>=1 and (N)>=1 Result
----------- ----------------- ------------------- --------
0 | 0 false | false false 'No'
0 | >=1 => false | true => false => 'No'
>=1 | 0 true | false false 'Yes'
>=1 | >=1 true | true true 'No'
看起来就像你做对了!
确定你的病情是否正确你需要建立一个真值表:
(1)
Yes | No | Result
-------------------------------
found | found | No
not found | found | No
found | not found | Yes
not found | not found | Null
或
(2)
\ No
Yes \ Found | Not Found |
-------------------------------
Found | No | Yes |
-------------------------------
Not Found | No | Null |
------------------------------
首先要注意的是,如果找到status == No,则结果始终为No。
只有当找不到No并且找到Yes时,我们才会返回Yes。
所以你的病情可以用嵌套的情况写出来。
select columns, ....
(
case when (SUM(CASE WHEN Status = 'N' THEN 1 ELSE 0 END)>=1) then 'No'
else case when (SUM(CASE WHEN Status = 'Y' THEN 1 ELSE 0 END)>=1) then 'Yes'
else NULL
end
end
) as result
条件中有2个变量很容易 如果您有更多变量,那么我建议您查看Karnaugh map
这里的另一个答案给出了原始解决方案:
select CASE WHEN MIN(status) = 'Y' THEN 'Yes' ELSE 'No' END
, Person
from table
group by Person
这是对的吗?
让我们先检查所有可能的输入。
Input:
{Y} - contains only Y in the column
{N} - contains only N in the column
{Y,N} - contains Y and N in the column
{} - Y and N do not appear in the column
让我们计算所有可能的结果:
Input MIN(status) Result
------- ------------- --------
{Y} Y Yes
{N} => N => No
{Y,N} N No
{} NULL No
这是一个正确的答案。