1
select *

FROM ##RawTrans

ORDER BY GroupBy ASC, 
    CASE WHEN @RepType = 'Emp' THEN 
        CASE WHEN @OrderBy = 0 THEN [Code] ELSE [Name] END, [Date], [Time]
    CASE WHEN @RepType = 'ClockEmp' THEN
        [Clock], CASE WHEN @OrderBy = 0 THEN [Code] ELSE [Name] END, [Date], [Time]
    CASE WHEN @RepType = 'EmpClock' THEN
        CASE WHEN @OrderBy = 0 THEN [Code] ELSE [Name] END, [Clock], [Date], [Time]     
END

誰かがこのコードのどこに私のエラーがあるのか​​ を知るのを手伝ってもらえますか?

7 行目でエラーが発生します

[「,」付近の構文が正しくありません]

GroupBy は、このコードの前に宣言された変数です

4

2 に答える 2

6

式は単一のcase値を返す必要があります。カンマで区切られたフィールド名を返すことはできません。

case次のような各値を作成する必要があります。

ORDER BY
  GroupBy ASC,
  CASE WHEN @RepType = 'ClockEmp' THEN [Clock] ELSE '' end,
  CASE WHEN @OrderBy = 0 THEN [Code] ELSE [Name] END,
  CASE WHEN @RepType = 'EmpClock' THEN [Clock] ELSE '' end,
  [Date],
  [Time]
于 2013-03-19T13:37:25.137 に答える
2

a のCASE内部がありますが、CASE両方を終了しないでください。

CASE WHEN @RepType = 'Emp' THEN 
        CASE WHEN @OrderBy = 0 THEN [Code] ELSE [Name] END,

あなたは 2 番目のケースを終了しますが、最初のケースは終了しません。

異なる基準で整理する場合は、CASE ステートメントを再編成して、一度に 1 つの列順序の選択に影響を与えるようにする必要があります。

于 2013-03-19T13:25:36.587 に答える