Mensimulasikan .NET's Math.Max dalam SQL Server untuk Berbilang Lajur
Fungsi MAX
SQL Server biasanya beroperasi pada satu lajur, mengembalikan nilai tertinggi dalam lajur tersebut. Walau bagaimanapun, mencerminkan kefungsian .NET Math.Max
—yang membandingkan berbilang nilai—memerlukan pendekatan berbeza dalam SQL Server.
Ini mudah dicapai dalam SQL Server 2008 dan versi yang lebih baru. Mari kita ilustrasikan dengan contoh:
Cabaran:
Anda memerlukan pertanyaan yang mengenal pasti nilai yang lebih besar antara lajur NegotiatedPrice
dan SuggestedPrice
dalam jadual Order
untuk setiap baris. Percubaan naif seperti ini tidak akan berjaya:
<code class="language-sql">SELECT o.OrderId, MAX(o.NegotiatedPrice, o.SuggestedPrice) FROM Order o</code>
Penyelesaian:
Penyelesaian yang ringkas dan cekap menggunakan subkueri dalam pernyataan SELECT
:
<code class="language-sql">SELECT o.OrderId, (SELECT MAX(Price) FROM (VALUES (o.NegotiatedPrice), (o.SuggestedPrice)) AS AllPrices(Price)) AS MaxPrice FROM Order o</code>
Pendekatan ini menawarkan beberapa faedah utama:
UNION
, PIVOT
atau CASE
.NULL
dengan anggun.MAX
boleh digantikan dengan fungsi agregat lain (cth., MIN
, AVG
, SUM
).VALUES
dalam subkueri. Contohnya:<code class="language-sql">SELECT MAX(a), MAX(b), MAX(c) FROM (VALUES (1, 2, 3), (4, 5, 6), (7, 8, 9)) AS MyTable(a, b, c)</code>
Kaedah ini menyediakan cara yang bersih dan berkesan untuk meniru gelagat fungsi Math.Max
.NET apabila bekerja dengan berbilang lajur dalam SQL Server.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Meniru Fungsi Math.Max .NET dalam Pelayan SQL untuk Berbilang Lajur?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!