鑑於在SQL Server 2005下表:從幾列中選擇最小值的最佳方法是什麼?
ID Col1 Col2 Col3
-- ---- ---- ----
1 3 34 76
2 32 976 24
3 7 235 3
4 245 1 792
什麼是寫得出以下結果(即一個能產生最後一列的查詢的最佳方式 - 包含鉛丹值的列了Col1中的,Col2和Col 3 ,每行)?
ID Col1 Col2 Col3 TheMin
-- ---- ---- ---- ------
1 3 34 76 3
2 32 976 24 24
3 7 235 3 3
4 245 1 792 1
UPDATE:
爲了澄清(正如我在評析說)在真實場景中的數據庫是正確歸。這些「數組」列不在實際表格中,但在報告中需要的結果集中。新的要求是報告也需要這個MinValue列。我無法更改底層結果集,因此我正在尋找T-SQL來獲得方便的「走出監獄卡」。
我嘗試了下面提到的CASE方法,它的工作原理雖然有點麻煩。它比答案中陳述的要複雜得多,因爲你需要迎合在同一行中有兩個最小值的事實。
無論如何,我想我會發布我目前的解決方案,鑑於我的限制,它運行得非常好。它使用了UNPIVOT操作:
with cte (ID, Col1, Col2, Col3)
as
(
select ID, Col1, Col2, Col3
from TestTable
)
select cte.ID, Col1, Col2, Col3, TheMin from cte
join
(
select
ID, min(Amount) as TheMin
from
cte
UNPIVOT (Amount for AmountCol in (Col1, Col2, Col3)) as unpvt
group by ID
) as minValues
on cte.ID = minValues.ID
我會說的前期,我不希望這提供最佳的性能,但鑑於這種情況(我不能重新設計只是爲新的MINVALUE列的所有查詢要求),這是一個非常優雅的「走出監獄卡」。
恕我直言,作者的UNPIVOT解決方案優於其他答案。 – 2011-11-11 11:31:45
我發現Nizam的解決方案是最精簡的解決方案,即使我花了一段時間纔開始瞭解它。精益和非常有用。 – 2015-08-27 15:09:18