decision
表如下:
Id decision
1 NULL
1 NULL
1 yes
1 NULL
2 no
2 no
2 no
3 yes
3 no
3 yes
结果应该返回:
Id decision
1 Decision Pending
2 no
3 yes
对于decision
表中的每个Id:
如果任何决策值为NULL,则将其设置为"决定pending"。如。id 1
如果没有NULL并且任何决策都是yes,则最终
决策被设置为&;yes&;。如。id 3如果没有NULL,所有的决定都是没有,那么最终决定设置为"no"。如。id 2
azure sql查询应该如何获得上述结果?
注:我是SQL的新手,所以很难弄清楚这一点。
SELECT
id,
CASE
WHEN COUNT(*) > COUNT(decision)
THEN 'pending'
ELSE MAX(decision)
END
AS decision
FROM
decision
GROUP BY
id
GROUP BY id
确保每个id
得到一行。
COUNT(*)
告诉你id
有多少行。
COUNT(decision)
告诉你有多少行有NOT NULL
的决定。
NULL
,那么COUNT(*) > COUNT(decision)
就是TRUE
。
MAX(decision)
在组中有yes
值时返回yes
,在组中没有yes
值时返回no
。
一种方法是比较count(*)
和count(decision)
,它显示一行是否为空,并使用内联if来简洁地知道使用聚合
select id, Iif(Count(*)=Count(decision),Max(decision),'Decision Pending')
from Decision
group by id