在ORDER BY中使用case语句 - “''附近的语法不正确',”

时间:2013-03-19 13:20:44

标签: sql sql-server

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是在此代码之前声明的变量

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:2)

CASE内有CASE,但不会同时结束这两个:

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

你结束了第二种情况,但不是你的第一种情况。

如果您打算按照不同的标准进行组织,则需要重新组织CASE语句,以便它们一次影响一个列顺序选择。