T-SQLクエリに関するヘルプが必要です。特別な値(たとえば、> 1)を持つフィールドをカウントします。
私のようなテーブルがあると仮定します:
_IGrp | Item | Value1 | Value2
#############################
A | I11 | 0.52 | 1.18
A | I12 | 1.30 | 0.54
A | I21 | 0.49 | 2.37
B | I22 | 2.16 | 1.12
B | I31 | 1.50 | 0.28
_
次のような結果が必要です:
_IGrp | V1High | V2High
######################
A | 1 | 2
B | 2 | 1
_
私の考えでは、これはこの表現で行くべきです
_SELECT IGrp, COUNT(Value1>1) AS V1High, COUNT(Value2>1) AS V2High
FROM Tbl GROUP BY IGrp
_
ただし、Count()はブール値をとらないため、T-SQLでは不可能です。それは本当に_WHERE Value>1
_とCOUNT(*)
で複数のクエリを実行し、それらを後で結合する唯一の可能な方法ですか?または、目的の結果を達成するためのトリックはありますか?
前もって感謝します。
SELECT IGrp,
COUNT(CASE WHEN Value1 > 1 THEN 1 ELSE NULL END) AS V1High,
COUNT(CASE WHEN Value2 > 1 THEN 1 ELSE NULL END) AS V2High
FROM Tbl
GROUP BY IGrp
CASE
ステートメントを使用できます。
SELECT IGrp,
SUM(CASE WHEN Value1>1 THEN 1 ELSE 0 END) AS V1High,
SUM(CASE WHEN Value2>1 THEN 1 ELSE 0 END) AS V2High
FROM Tbl GROUP BY IGrp
case when
を利用してください
SELECT IGrp,
sum(case when isnull(Value1,0)>1 then 1 else 0 end) AS V1High,
sum(case when isnull(Value2,0)>1 then 1 else 0 end) AS V2High
FROM Tbl GROUP BY IGrp
SELECT IGrp,
COUNT(CASE WHEN Value1 = 'Foo' THEN 1 ELSE NULL END) AS Tot_Foo,
COUNT(CASE WHEN Value1 = 'Blah' THEN 1 ELSE NULL END) AS Tot_Blah
FROM Tbl
GROUP BY IGrp
これを使用して、同じフィールドの2つの異なる値を比較することもできます。上記のように少し変更します。
1:1の比率で存在するはずの値を検証するのに非常に役立ちます。
CASE .. WHEN ..ステートメントをCOUNT()関数内に入れて、条件が成立する場合は1を返し、そうでない場合はNULLを返すことができます。