计算列规范 - 最小值?

时间:2013-01-28 20:46:04

标签: sql sql-server aggregate minimum

我在SQL Server中有一个表,并且我想要一个列来计算其他三列(Vendor1,Vendor2和Vendor3)的最小值。我已经弄清楚如何对值求和但无法弄清楚如何找到最小值 - 我不断得到一个错误,即聚合可能不会出现在计算列中。有没有一种简单的方法来解决这个问题?

3 个答案:

答案 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