【发布时间】:2015-07-10 01:09:09
【问题描述】:
我有一个这样的查询:
DECLARE @Sortorder VARCHAR(5) = 'asc',
@ColumnNumber INT = 9
SELECT
SUBSTRING(csu.UserName, CHARINDEX(CHAR(92), csu.UserName) + 1, LEN(csu.UserName)) AS UserName, w.WorkItemId
FROM [tasks].[WorkItems] w
LEFT JOIN operations.CustomerServiceUser csu ON csu.UserId = w.AssignedToUserId
WHERE
w.[ShowInTaskList] = 1 AND UserName IS NOT NULL
ORDER BY
CASE WHEN @ColumnNumber = 9 AND @SortOrder = 'asc' THEN UserName END ASC,
CASE WHEN @ColumnNumber = 9 AND @SortOrder = 'desc' THEN UserName END DESC
当我这样做时,数据不会按用户名按任何顺序 asc 或 desc 排序,但是当我这样做时:
SELECT
SUBSTRING(csu.UserName, CHARINDEX(CHAR(92), csu.UserName) + 1, LEN(csu.UserName)) AS UserName, w.WorkItemId
FROM [tasks].[WorkItems] w
LEFT JOIN operations.CustomerServiceUser csu ON csu.UserId = w.AssignedToUserId
WHERE
w.[ShowInTaskList] = 1 AND UserName IS NOT NULL
ORDER BY
UserName
我在动态顺序中做错了什么?声明的变量和案例中的值相同。坦率地说,我不知道应该将哪些关键字传递给 google ;) 非常感谢您的回答。
【问题讨论】:
-
如何同时使用用户名 asc 和 desc 进行订购。我错过了什么吗?您的两个订单声明都是真实的。
-
哇,没想到,谢谢!!请在我的问题下回答,以便我竖起大拇指;)
-
您认为这两种 order by 语句如何正确?这取决于将存储什么
@SortOrder变量... -
hmm 有一个答案,事实上我得到的是 LEN 而不是用户名,并且回答对我有用,当你输入排序顺序时,回答你的问题不是同时asc 它将按 asc 排序,如果 desc 然后 desc 问题是当...的情况下它没有排序
标签: sql sql-server tsql sorting sql-order-by