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,

你结束了你的第二个案例,但不是你的第一个。

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

于 2013-03-19T13:25:36.587 回答