ใน SQL Server 2012 หรือสูงกว่าคุณสามารถใช้การรวมกันของIIF
และISNULL
(หรือCOALESCE
) เพื่อรับค่าสูงสุด 2
แม้ว่าหนึ่งในนั้นคือ NULL
IIF(col1 >= col2, col1, ISNULL(col2, col1))
หรือถ้าคุณต้องการให้ส่งคืน 0 เมื่อทั้งคู่เป็น NULL
IIF(col1 >= col2, col1, COALESCE(col2, col1, 0))
ตัวอย่างข้อมูล:
-- use table variable for testing purposes
declare @Order table
(
OrderId int primary key identity(1,1),
NegotiatedPrice decimal(10,2),
SuggestedPrice decimal(10,2)
);
-- Sample data
insert into @Order (NegotiatedPrice, SuggestedPrice) values
(0, 1),
(2, 1),
(3, null),
(null, 4);
-- Query
SELECT
o.OrderId, o.NegotiatedPrice, o.SuggestedPrice,
IIF(o.NegotiatedPrice >= o.SuggestedPrice, o.NegotiatedPrice, ISNULL(o.SuggestedPrice, o.NegotiatedPrice)) AS MaxPrice
FROM @Order o
ผลลัพธ์:
OrderId NegotiatedPrice SuggestedPrice MaxPrice
1 0,00 1,00 1,00
2 2,00 1,00 2,00
3 3,00 NULL 3,00
4 NULL 4,00 4,00
แต่ถ้าต้องการ SUM หลายค่า?
ถ้าอย่างนั้นฉันขอแนะนำให้นำ CROSS ไปใช้กับการรวมค่า
นอกจากนี้ยังมีประโยชน์ที่สามารถคำนวณสิ่งอื่น ๆ ในเวลาเดียวกัน
ตัวอย่าง:
SELECT t.*
, ca.[Total]
, ca.[Maximum]
, ca.[Minimum]
, ca.[Average]
FROM SomeTable t
CROSS APPLY (
SELECT
SUM(v.col) AS [Total],
MIN(v.col) AS [Minimum],
MAX(v.col) AS [Maximum],
AVG(v.col) AS [Average]
FROM (VALUES (t.Col1), (t.Col2), (t.Col3), (t.Col4)) v(col)
) ca
GREATEST
ฟังก์ชั่น; SQLite จำลองการสนับสนุนโดยอนุญาตให้มีหลายคอลัมน์ในการMAX
รวม