0

次の列(id、fkid、flag1、flag2、flag3、flag4)を持つテーブルがあります。各フラグ フィールドの可能な値は -1 から 3 で、null が許可されます。必要なのは、特定の外部キー f​​kid に対して、値が 2 のフラグ フィールドのカウントが 3 より大きいかどうかを確認するクエリです。私がやっている方法は、フィールドごとにクエリを書くことです。それは機能しますが、私にはあまり賢くありません。誰でも良い考えがありますか?ありがとう。

4

2 に答える 2

1

以下のクエリも質問に答えます。SQL フィドルの例: 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 に答える
1

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 に答える