3

次のコードがあり、これらを group by に含めない方法がわかりません。いくつかの議論は純粋にケースのためのものであり、それがすべてです。グループに含めることはできません。TransactionTyp のみでカウントを取得する必要があるため、実際には他にグループ化することはできませんが、集計関数または GROUP BY 句のいずれにも含まれていないため、選択リストでは無効です。

たぶん、CASE の使用はこれを行うのに間違った方法でしょうか? しかし、他のフィールドに基づいて値の一部を置き換える必要があります。

これはMS SQLにもあります。

SELECT  Count(*), 
    CASE 
        WHEN a.TransactionTyp IS NOT NULL THEN a.TransactionTyp
        WHEN a.ClaimStatus = 'Resolved-Deflected' THEN 'Deflected'
        WHEN a.ClaimStatus = 'Resolved-NoAction' THEN 'Deflected'
        WHEN a.ClaimStatus = 'Open' AND b.AssignOperator = 'PendClaim.NF_POS_Pinless' THEN 'Affiliate'
    END As TransactionTyp
FROM Table1 a
LEFT JOIN Table2 b
    ON a.ClaimNbr = b.ClaimDisputeNbr AND b.CreateDte = Convert(varchar,GetDate(), 101)
WHERE a.ClaimEntryDte = Convert(varchar,GetDate(),101)    
AND a.ClaimTypCd  IN ('DEBS', 'DEBSI', 'DBCIN', 'DBCUS')
GROUP BY TransactionTyp
4

4 に答える 4

3

group by問題の 1 つは、句でエイリアスを参照できないことです。caseで定義を繰り返してみてくださいgroup by:

GROUP BY
    CASE 
        WHEN a.TransactionTyp IS NOT NULL THEN a.TransactionTyp
        WHEN a.ClaimStatus = 'Resolved-Deflected' THEN 'Deflected'
        WHEN a.ClaimStatus = 'Resolved-NoAction' THEN 'Deflected'
        WHEN a.ClaimStatus = 'Open' AND b.AssignOperator = 'PendClaim.NF_POS_Pinless' THEN 'Affiliate'
    END As TransactionTyp

または、サブクエリを使用してエイリアスを定義します。

select  TransactionTyp
,       count(*)
from    (
        SELECT  CASE 
                WHEN a.TransactionTyp IS NOT NULL THEN a.TransactionTyp
                WHEN a.ClaimStatus = 'Resolved-Deflected' THEN 'Deflected'
                WHEN a.ClaimStatus = 'Resolved-NoAction' THEN 'Deflected'
                WHEN a.ClaimStatus = 'Open' AND b.AssignOperator = 'PendClaim.NF_POS_Pinless' THEN 'Affiliate'
                END As TransactionTyp
        FROM    Table1 a
        LEFT JOIN 
                Table2 b
        ON      a.ClaimNbr = b.ClaimDisputeNbr 
                AND b.CreateDte = Convert(varchar,GetDate(), 101)
        WHERE   a.ClaimEntryDte = Convert(varchar,GetDate(),101)    
                AND a.ClaimTypCd  IN ('DEBS', 'DEBSI', 'DBCIN', 'DBCUS')
        )
GROUP BY 
        TransactionTyp
于 2013-04-26T12:24:31.950 に答える
0

は、ID ではなくステートメントに含まCASEれている必要があります。Group BY

このような:

GROUP BY CASE 
    WHEN a.TransactionTyp IS NOT NULL THEN a.TransactionTyp
    WHEN a.ClaimStatus = 'Resolved-Deflected' THEN 'Deflected'
    WHEN a.ClaimStatus = 'Resolved-NoAction' THEN 'Deflected'
    WHEN a.ClaimStatus = 'Open' AND b.AssignOperator = 'PendClaim.NF_POS_Pinless' THEN 'Affiliate'
END
于 2013-04-26T12:24:54.633 に答える
0

クエリから何を返すかを指定する場合、結果は既にグループ化されているため、返したいものはすべて で指定する必要がありますgroup by

これに対する解決策は、値を計算するサブクエリを作成することです。その後、サブクエリからの結果をグループ化できます。

SELECT Count(*), TransactionTyp
FROM (
  SELECT
    CASE 
        WHEN a.TransactionTyp IS NOT NULL THEN a.TransactionTyp
        WHEN a.ClaimStatus = 'Resolved-Deflected' THEN 'Deflected'
        WHEN a.ClaimStatus = 'Resolved-NoAction' THEN 'Deflected'
        WHEN a.ClaimStatus = 'Open' AND b.AssignOperator = 'PendClaim.NF_POS_Pinless' THEN 'Affiliate'
    END As TransactionTyp
  FROM Table1 a
  LEFT JOIN Table2 b
    ON a.ClaimNbr = b.ClaimDisputeNbr AND b.CreateDte = Convert(varchar,GetDate(), 101)
  WHERE a.ClaimEntryDte = Convert(varchar,GetDate(),101)    
  AND a.ClaimTypCd  IN ('DEBS', 'DEBSI', 'DBCIN', 'DBCUS')
) as x
GROUP BY TransactionTyp
于 2013-04-26T12:26:11.687 に答える