我有一个包含以下列的表,(id,fkid,flag1,flag2,flag3,flag4)。每个标志字段的可能值为-1到3,并且允许为null。我需要的是一个查询来检查给定外键fkid的值为2的任何标志字段的计数是否大于3。我正在做的是为每个字段写一个查询。它有效但对我来说并不聪明。谁有更好的主意?感谢。
答案 0 :(得分: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
我同意这些意见,但样本数据,样本结果和清晰的表格结构将大大改善这个问题。
答案 1 :(得分:1)
下面的查询也会回答你的问题,例如: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