0

我有一个包含以下列的表格,(id,fkid,flag1,flag2,flag3,flag4)。每个标志字段的可能值为 -1 到 3,并且允许为空。我需要的是一个查询,以检查给定外键 fkid 的任何值为 2 的标志字段的计数是否大于 3。我正在做的方式是为每个字段编写一个查询。它有效,但对我来说并不聪明。有人有更好的主意吗?谢谢。

4

2 回答 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 回答