1

ここで何が間違っているのかわかりません。フィールド HasNoteDate が無効であると表示されます。日付がある場合は 1 を返し、ない場合は 0 を返すようにしたいだけで、カウントとローン金額の合計を取得できるようにグループ化したかったのです。ケースごとにグループ化するためのstackoverflowの回答を見てきましたが、どれも解決していません。ありがとう!

SELECT    dbo.BDONAMES.UserID, dbo.BRKRMAST.Tier, dbo.BDONAMES.REGION, COUNT(*) AS TierRegionCount, 
                      SUM(dbo.LOAN.LOAN_AMT) AS LoanAmtSum, dbo.LOAN.DEAL_STATUS, CASE WHEN dbo.WORKFLOW.NOTE_DATE IS NULL 
                      THEN 0 ELSE 1 END AS HasNoteDate
FROM         dbo.BRKRMAST INNER JOIN
                      dbo.BRKRREF ON dbo.BRKRMAST.BRKRMASTID = dbo.BRKRREF.BRKRMASTID INNER JOIN
                      dbo.LOAN ON dbo.BRKRREF.LoanId = dbo.LOAN.LoanId INNER JOIN
                      dbo.WORKFLOW ON dbo.LOAN.LoanId = dbo.WORKFLOW.LoanId LEFT OUTER JOIN
                      dbo.BDONAMES ON dbo.BRKRMAST.BDONAMESID = dbo.BDONAMES.BDONAMESID
WHERE     (LEN(dbo.BDONAMES.UserID) > 0) AND (dbo.BRKRMAST.Tier > 0) AND (LEN(dbo.BDONAMES.REGION) > 0)
GROUP BY dbo.BDONAMES.UserID, dbo.BRKRMAST.Tier, dbo.BDONAMES.REGION, dbo.LOAN.LOAN_AMT, dbo.LOAN.DEAL_STATUS, HasNoteDate
ORDER BY dbo.BDONAMES.UserID, dbo.BRKRMAST.Tier, dbo.BDONAMES.REGION
4

2 に答える 2

2

SQL クエリ実行のロジックは、一般的なプログラミング言語ほど単純ではありません

クエリの実行ステージの例を次に示します。

  1. のテーブルで結合を実行するFROM CLAUSE
  2. 実行-現時点では定義されていないため、これGROUP BYによりエラーが発生しますHasNoteDate
  3. 実行ORDER BY
  4. 実行SELECT- この段階でのみ列HasNoteDateが定義されます

したがって、GROUP BY で未定義の列を使用することはできませんHasNoteDate。それをステートメントに置き換える必要があります(CASE WHEN dbo.WORKFLOW.NOTE_DATE IS NULL THEN 0 ELSE 1 END)。その後、SQL サーバーは次のことができるようになります。GROUP

于 2013-10-18T22:58:53.207 に答える