表溫度SQL Server組
ID Status
1 completed
2 approved
3 paid
4 cancel
5 approved
6 paid
我想上面顯示的條記錄每以下表格,而無需使用union.because這是客戶的要求,所以請爲此提供幫助。
表溫度
ID Status
1 completed
2 approved
5 approved
3 paid
6 paid
4 cancel
表溫度SQL Server組
ID Status
1 completed
2 approved
3 paid
4 cancel
5 approved
6 paid
我想上面顯示的條記錄每以下表格,而無需使用union.because這是客戶的要求,所以請爲此提供幫助。
表溫度
ID Status
1 completed
2 approved
5 approved
3 paid
6 paid
4 cancel
幾乎等同於丹的回答,但對於SQL Server(或任何標準的SQL數據庫系統):
SELECT
ID,
Status
FROM
temp
ORDER BY
CASE Status
WHEN 'completed' THEN 1
WHEN 'approved' THEN 2
WHEN 'paid' THEN 3
WHEN 'cancel' THEN 4
END
其他關切 -
1)這個問題的標題似乎是誤導性的,因爲它沒有t x關於GROUP BY可言,而且,
2)我覺得你有一種誤解,約UNION
還 - 有沒有在這結果將返回從UNION
或UNION ALL
訂單的保證 - 在UNION
情況下,有可能是一種排序操作,可幫助服務器消除重複項,但執行的排序完全取決於服務器,因此您不應該依賴這種排序。對於UNION ALL
,想象一下,如果第一個查詢是一個大型查詢,需要大量的I/O,而第二個查詢是微不足道的(比如說,所有需要的數據都已經在內存中)。服務器的一個明顯的優化是返回第二個查詢的結果,同時它仍然執行第一個I/O。
既然你想任意命令行,你可以在ORDER BY
子句中使用CASE
聲明。這裏有一個工作的例子,會給你你正在尋找(用於SQL Server)輸出:
DECLARE @myTable AS TABLE([ID] INT, [Status] VARCHAR(16))
INSERT INTO @myTable VALUES(1, 'completed')
INSERT INTO @myTable VALUES(2, 'approved')
INSERT INTO @myTable VALUES(3, 'paid')
INSERT INTO @myTable VALUES(4, 'cancel')
INSERT INTO @myTable VALUES(5, 'approved')
INSERT INTO @myTable VALUES(6, 'paid')
SELECT *
FROM @myTable
ORDER BY
CASE [ID]
WHEN 1 THEN 1
WHEN 2 THEN 2
WHEN 3 THEN 4
WHEN 4 THEN 5
WHEN 5 THEN 3
WHEN 6 THEN 6
ELSE 999
END
select ID,
[Status]
from Temp
order by case [Status]
when 'completed' then 1
when 'approved' then 2
when 'paid' then 3
when 'cancel' then 4
else 5
end, ID
感謝朋友其工作正常。 –
感謝朋友的工作正常。 –