我有一個查詢返回其他記錄狀態列。記錄狀態欄有多個值,如:「活動」,「刪除」,等等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'的值。 –