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