民间,
我先研究过这个问题而没有针对我的具体问题提出任何问题,我发现SUM/CASE
很整洁但不完全是我需要的。这是我的情况:
我被要求报告满足 8个条件中的5个的总人数。
我无法想出最好的方法。这必须与为每个条件设置counter
,然后在最后添加计数器并返回满足8个条件中的5个的人数(称为条件a - h)
那你可以计算一下吗?
像
这样的东西if exists (code for condition A) 1 ELSE 0
if exists (code for condition B) 1 ELSE 0
etc
sum(count)
谢谢
答案 0 :(得分:1)
由于条件跨行传播,您可以通过在MAX()
子句中合并CASE
和HAVING
语句来执行此操作:
SELECT person_ID
FROM YourTable
GROUP BY Person_ID
HAVING MAX(CASE WHEN ConditionA THEN 1 END)
+ MAX(CASE WHEN ConditionB THEN 1 END)
+ MAX(CASE WHEN ConditionC THEN 1 END)
+ MAX(CASE WHEN ConditionD THEN 1 END)
+ MAX(CASE WHEN ConditionE THEN 1 END)
+ MAX(CASE WHEN ConditionF THEN 1 END)
+ MAX(CASE WHEN ConditionG THEN 1 END)
+ MAX(CASE WHEN ConditionH THEN 1 END)
>= 5
答案 1 :(得分:0)
怎么样:
WHERE CASE WHEN (Code for condition A) then 1 else 0 end +
CASE WHEN (Code for condition B) then 1 else 0 end +
CASE WHEN (Code for condition C) then 1 else 0 end +
...
= 5
答案 2 :(得分:0)
用户定义的救援功能
SELECT * FROM view_people_with_conditions_count WHERE conditions_count BETWEEN 5 AND 8
CREATE VIEW view_people_with_conditions_count
AS
SELECT *, dbo.GetCondtionsCount(id) as conditions_count FROM peoples_table
CREATE function GetCondtionsCount(@id int)
RETURNS int
AS
BEGIN
DECLARE @counter int
' implement your conditions here
IF (condtion1) SET @counter = @counter + 1
IF (condtion2) SET @counter = @counter + 1
IF (condtion3) SET @counter = @counter + 1
RETURN @counter
END
答案 3 :(得分:0)
我最后通过使用WITH语句来完成此操作 像这样的东西:
WITH
(
为第一个条件选择语句AS blah
为第二个条件选择语句AS blah
为第三个条件选择语句AS blah
为第四个条件选择语句AS blah
为第五个条件选择语句AS blah
为第六个条件选择语句AS blah
选择第七个条件的陈述AS blah
为第八个条件选择语句AS blah
)
选择
CASE WHEN(基于8选择的8个案例
我只是将结果放在电子表格中并在Excel中完成所有数学