我有一个查询返回其他记录状态列。记录状态栏有多个值,如:“活动”,“删除”,等等TSQL排序依据 - 硬编码值列表
我需要按结果“活动”,然后选择“删除”,然后等...
我目前正在创建CTE来带来每一组记录,然后是UNION ALL。是否有更好的动态方法来完成查询?
谢谢
我有一个查询返回其他记录状态列。记录状态栏有多个值,如:“活动”,“删除”,等等TSQL排序依据 - 硬编码值列表
我需要按结果“活动”,然后选择“删除”,然后等...
我目前正在创建CTE来带来每一组记录,然后是UNION ALL。是否有更好的动态方法来完成查询?
谢谢
欲了解更多情况值,你可以这样做:
WITH StatusOrders
AS
(
SELECT StatusOrderID, StatusName
FROM (VALUES(1, 'Active'),
(2, 'Deleted'),
...
n, 'last status')) AS Statuses(StatusOrderID, StatusName)
)
SELECT *
FROM YourTable t
INNER JOIN StatusOrders s ON t.StatusName = s.StatusName
ORDER BY s.StatusOrderID;
你可以在这里
ORDER BY CASE WHEN Status = 'Active' THEN 0 ELSE 1 END ASC
使用CASE
,但如果你有status
更多的价值,并要排序Active
然后DELETE
ORDER BY CASE WHEN Status = 'Active' THEN 0
WHEN Status = 'Deleted' THEN 1
ELSE 2
END ASC
WITH
cteRiskStatus
AS
(
SELECT RiskStatusID, RiskStatusName
FROM (VALUES(1, 'Active'),
(2, 'Draft'),
(3, 'Occured'),
(4, 'Escalated'),
(5, 'Closed'),
(6, 'Expired'),
(7, 'Deleted')) AS RiskStatuses(RiskStatusID, RiskStatusName)
)
SELECT * FROM cteRiskStatus
感谢
马哈茂德·您好,我得到一个错误:附近关键字“价值”不正确的语法。 – Bill
@Bill - 你能告诉我你尝试过的确切查询吗?它应该可以正常工作。请注意,这里的'VALUES'的synatx在SQL Server 2008中是新的,如果你使用的是旧版本,它不会以这种方式工作,你将不得不''UNION ALL SELECT'的值。 –