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