Jika Anda menggunakan SQL Server 2008 (atau lebih tinggi), maka ini adalah solusi yang lebih baik:
SELECT o.OrderId,
(SELECT MAX(Price)
FROM (VALUES (o.NegotiatedPrice),(o.SuggestedPrice)) AS AllPrices(Price))
FROM Order o
Semua kredit dan suara harus ditujukan ke jawaban Sven untuk pertanyaan terkait, "SQL MAX dari beberapa kolom?"
Saya katakan itu adalah "jawaban terbaik " karena:
- Tidak perlu memperumit kode Anda dengan pernyataan UNION, PIVOT,UNPIVOT, UDF, dan CASE yang sangat panjang.
- Ini tidak diganggu dengan masalah penanganan null, ini menanganinya dengan baik.
- Sangat mudah untuk menukar "MAX" dengan "MIN", "AVG", atau "SUM". Anda dapat menggunakan fungsi agregat apa pun untuk menemukan agregat pada banyak kolom berbeda.
- Anda tidak terbatas pada nama yang saya gunakan (yaitu "AllPrice" dan "Price"). Anda dapat memilih nama Anda sendiri agar lebih mudah dibaca dan dipahami oleh orang berikutnya.
- Anda dapat menemukan beberapa agregat menggunakan turunan_tabel SQL Server 2008 seperti:
SELECT MAX(a), MAX(b) FROM (VALUES (1, 2), (3, 4), (5, 6) , (7, 8), (9, 10) ) SEBAGAI MyTable(a, b)