SQL Server计算不相关的条件

时间:2013-12-20 17:49:22

标签: sql sql-server sql-server-2008 count conditional

民间,

我先研究过这个问题而没有针对我的具体问题提出任何问题,我发现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)

谢谢

4 个答案:

答案 0 :(得分:1)

由于条件跨行传播,您可以通过在MAX()子句中合并CASEHAVING语句来执行此操作:

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中完成所有数学