我有一个包含以下列的表格,(id,fkid,flag1,flag2,flag3,flag4)。每个标志字段的可能值为 -1 到 3,并且允许为空。我需要的是一个查询,以检查给定外键 fkid 的任何值为 2 的标志字段的计数是否大于 3。我正在做的方式是为每个字段编写一个查询。它有效,但对我来说并不聪明。有人有更好的主意吗?谢谢。
2 回答
            1        
        
		
您可以通过一个查询来做到这一点:
select fkid
from t
group by fkid
having sum(case when flag1 = 2 then 1 else 0 end) > 3 or
       sum(case when flag2 = 2 then 1 else 0 end) > 3 or
       sum(case when flag3 = 2 then 1 else 0 end) > 3 or
       sum(case when flag4 = 2 then 1 else 0 end) > 3
不过,我确实非常同意这些评论,即样本数据、样本结果和清晰的表格结构将大大改善这个问题。
于 2012-11-09T20:39:57.417   回答
    
    
            1        
        
		
下面的查询也将回答您的问题,sql fiddle 示例:http ://sqlfiddle.com/#!3/adda9/2
SELECT 
   DISTINCT fkid 
FROM
  tblTest pvt
UNPIVOT
  (
    FlagValue FOR Flag IN
       (flag1,flag2,flag3,flag4)
  ) as Unpvt
WHERE
  FlagValue = 2
GROUP BY
  FKID, FLAG
HAVING COUNT(*)>3
于 2012-11-09T20:52:40.910   回答