Trong SQL Server 2012 trở lên, bạn có thể sử dụng kết hợp IIF
và ISNULL
(hoặc COALESCE
) để nhận tối đa 2 giá trị.
Ngay cả khi 1 trong số họ là NULL.
IIF(col1 >= col2, col1, ISNULL(col2, col1))
Hoặc nếu bạn muốn nó trả về 0 khi cả hai đều là NULL
IIF(col1 >= col2, col1, COALESCE(col2, col1, 0))
Đoạn trích ví dụ:
-- 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
Kết quả:
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
Nhưng nếu một người cần SUM nhiều giá trị?
Sau đó, tôi đề nghị CROSS ỨNG DỤNG để tổng hợp các GIÁ TRỊ.
Điều này cũng có lợi ích là điều này có thể tính toán những thứ khác cùng một lúc.
Thí dụ:
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
chức năng; SQLite mô phỏng hỗ trợ bằng cách cho phép nhiều cột trongMAX
tổng hợp.