1

これに関する他の同様の質問を確認しましたWhereが、クエリに句がないため、解決方法について少し混乱しています。

INSERT INTO #tmpCombined  
SELECT A.Region  
    , 'MyLocation' AS 'Location'  
    , c.Id AS 'CompID'  
    , c.Name AS 'CompName'  
    , 'Cash' AS 'Context'  
    , isnull( sum( CASE WHEN T.TranAge >= 0 and CASE WHEN T.TranAge < 1 THEN 1 ELSE 0 END,0 )) AS 'ZeroDays0'  
    , isnull( sum( CASE WHEN T.TranAge >= 1 and CASE WHEN T.TranAge < 8 THEN 1 ELSE 0 END ), 0 ) AS '1to7Days'  
    , isnull( sum( CASE WHEN T.TranAge >=  8 and CASE WHEN T.TranAge < 16 THEN 1 ELSE 0 END ), 0 ) AS '8to15Days'  
    , isnull( sum( CASE WHEN T.TranAge >=  16 and CASE WHEN T.TranAge < 20 THEN 1 ELSE 0 END ), 0 ) AS '16to20Days'  
    , isnull( sum( CASE WHEN T.TranAge >=  20 THEN 1 ELSE 0 END ), 0 ) AS '20DaysPlus'  
    , COUNT(1) AS 'Total'  
    , A.Level as 'Level'  
    , sum(T.USDDifference) AS 'USDRevaluation'  
    from MyLocation.dbo.Company C  
    inner join #tmpCashTBResults T on T.CompanyId = C.Id  
    inner join #tmpCashAccounts A on T.CompanyId = A.CompanyId  
    group by A.Region, C.Id, C.Name, A.Level  
4

6 に答える 6

1

CASE WHEN T.TranAge >= 0 および CASE WHEN T.TranAge < 1 THEN 1

これは

 CASE 
    WHEN T.TranAge >= 0 and T.TranAge < 1 THEN 1
 ...

これは、CASE ... WHEN 構文を使用して複合条件を指定するための構文です。

于 2012-11-05T09:54:04.370 に答える
0

クエリの修正事項

  1. 単一引用符で囲まれたエイリアス名の使用は非推奨です。角かっこの使用に慣れるか、エイリアスが問題ない場合はそのままにしておきます
  2. を既に使用している場合SUM(CASE.. WHEN.. THEN 1 ELSE 0 END)、CASE ステートメントの性質上、NULL になることはありません。そのため、ISNULL でラップすることは冗長です。
  3. の基本構造CASECASE WHEN <condition> THEN <value>. here は、<condition>複数の比較であっても、任意の式にすることができます。

修正および再フォーマットされたクエリ:

  INSERT INTO #tmpCombined  
  SELECT A.Region  
       , 'MyLocation' AS Location  
       , c.Id AS CompID  
       , c.Name AS CompName  
       , 'Cash' AS Context  
       , sum( CASE WHEN T.TranAge >= 0 and T.TranAge < 1 THEN 1 ELSE 0 END) AS ZeroDays0  
       , sum( CASE WHEN T.TranAge >= 1 and T.TranAge < 8 THEN 1 ELSE 0 END) AS [1to7Days]  
       , sum( CASE WHEN T.TranAge >= 8 and T.TranAge < 16 THEN 1 ELSE 0 END) AS [8to15Days]  
       , sum( CASE WHEN T.TranAge >= 16 and T.TranAge < 20 THEN 1 ELSE 0 END) AS [16to20Days]  
       , sum( CASE WHEN T.TranAge >= 20 THEN 1 ELSE 0 END) AS [20DaysPlus]  
       , COUNT(1) AS Total  
       , A.Level as Level  
       , sum(T.USDDifference) AS USDRevaluation  
    from MyLocation.dbo.Company C  
    join #tmpCashTBResults T on T.CompanyId = C.Id  
    join #tmpCashAccounts A on T.CompanyId = A.CompanyId  
group by A.Region, C.Id, C.Name, A.Level;
于 2012-11-05T10:17:30.520 に答える
0

ここにこのビット:

THEN 1 ELSE 0 END,0 )) AS 'ZeroDays0'

する必要があります

THEN 1 ELSE 0 END) ,0 ) AS 'ZeroDays0'

多分?

于 2012-11-05T09:53:48.740 に答える
0

あなたは,0ここで間違った場所にいます、これを変更してください:

isnull( sum( CASE WHEN T.TranAge >= 0 and CASE WHEN T.TranAge < 1 THEN 1 ELSE 0 END,0 ))

に:

isnull( sum( CASE WHEN T.TranAge >= 0 and CASE WHEN T.TranAge < 1 THEN 1 ELSE 0 END), 0)

また、あなたの発言は間違っています。その状態caseに別のものがあってはなりません。case次のように変更します。

CASE WHEN T.TranAge >= 0 and CASE WHEN T.TranAge < 1 THEN 1 ELSE 0 END

に:

CASE WHEN T.TranAge >= 0 and T.TranAge < 1 THEN 1 ELSE 0 END
于 2012-11-05T09:54:05.617 に答える
0

ケースの状態を変更してください:

, isnull( sum( CASE WHEN T.TranAge >= 0 and T.TranAge < 1 THEN 1 ELSE 0 END ),0) AS 'ZeroDays0'  
于 2012-11-05T09:54:46.550 に答える
0

ZeroDays0 列の場合,0、ISNULL ではなく、SUM 関数の引数として渡します。

于 2012-11-05T09:54:51.793 に答える