0

SQL Server にテーブルがあり、他の 3 つの列 (Vendor1、Vendor2、および Vendor3) から最小値を計算する列があります。値を合計する方法はわかりましたが、最小値を見つける方法がわかりません。集計が計算列に表示されない可能性があるというエラーが表示され続けます。これを理解する簡単な方法はありますか?

4

3 に答える 3

2

式を使用できCASEます

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
  ) 

しかし、列があるということは、テーブルが第 1 正規形Vendor1 - 3ではないことを示している可能性があります。

于 2013-01-28T20:56:05.377 に答える
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))
于 2013-01-28T21:08:33.780 に答える
0

MIN は、集計と言うとおりです。単一の列のすべての行で列の最小値を見つけます。あなたがしようとしているのは、3 つの列にわたって各行の最小値を見つけることのようです。SQL にはそれを行う組み込み関数はありませんが、Martin SMith が既に示したように、単純な CASE 式で実行できます。

計算列ではなくビューの使用を検討することもできます。これにより、この方法も可能になります。

SELECT     OtherColumn,
                          (SELECT     MIN(Vendor) AS Expr1
                            FROM          (SELECT     Vendor1 AS Vendor
                                                    UNION ALL
                                                    SELECT     Vendor2
                                                    UNION ALL
                                                    SELECT     Vendor3)) AS VendorMimum
FROM         Vendors
于 2013-01-28T21:12:12.143 に答える