我在SQL Server中有一个表,并且我想要一个列来计算其他三列(Vendor1,Vendor2和Vendor3)的最小值。我已经弄清楚如何对值求和但无法弄清楚如何找到最小值 - 我不断得到一个错误,即聚合可能不会出现在计算列中。有没有一种简单的方法来解决这个问题?
答案 0 :(得分:2)
您可以使用CASE
expresion
CREATE TABLE T
(
Vendor1 INT,
Vendor2 INT,
Vendor3 INT,
MinVendor AS CASE
WHEN Vendor1 < Vendor2
AND Vendor1 < Vendor3 THEN Vendor1
WHEN Vendor2 < Vendor3 THEN Vendor2
ELSE Vendor3
END
)
但是列Vendor1 - 3
可能表示您的表格不在first normal form。
答案 1 :(得分:1)
试试这个:
CREATE FUNCTION dbo.MinOf3(@a int, @b int, @c int)
RETURNS INT
AS
BEGIN
RETURN (SELECT MIN(a) FROM (
SELECT @a a UNION ALL
SELECT @b UNION ALL
SELECT @c
) T(a)
)
END
GO
CREATE TABLE T(a1 int, a2 int, a3 int, a4 as dbo.MinOf3(a1, a2, a3))
答案 2 :(得分:0)
MIN就像它所说的那样。它为单个列的所有行查找列的最小值。听起来你要做的就是找到三列中每行的最小值。 SQL没有内置函数来执行此操作,但可以使用Martin SMith已经显示的简单CASE表达式来完成。
您可能还想考虑使用View而不是Computed Column,这样您也可以这样做。
SELECT OtherColumn,
(SELECT MIN(Vendor) AS Expr1
FROM (SELECT Vendor1 AS Vendor
UNION ALL
SELECT Vendor2
UNION ALL
SELECT Vendor3)) AS VendorMimum
FROM Vendors