2

テーブルアイテムがあり、特定のIDのアイテムの最低価格を取得したい

テーブル アイテム:

Id    Price1                Price2           Price3
1       10                    20                30
2       20                    30                40

上記の例によると、id-1の最低価格は10で、id-2の最低価格は20です。特定のIDの3つの列から最小値を取得したいだけです。

覚えておいてください:どの列もnullになる可能性があるため、ケースを作成できません。前もって感謝します。

4

5 に答える 5

2

1 つのアプローチは次のようになります。

SELECT Id, MIN(Price) FROM (
   SELECT Id, Price1 As Price FROM Table1
   UNION ALL
   SELECT Id, Price2 As Price FROM Table1
   UNION ALL
   SELECT Id, Price3 As Price FROM Table1
) As AllValues
GROUP BY Id

これは、値があっても機能しnullます。これが動作デモです。

于 2013-09-09T06:47:38.513 に答える
1

APPLY演算子を使用した 2 つの同様のソリューション:

SELECT t.Id,
       MIN(m.Price)
FROM   
    tableX AS t
  CROSS APPLY
    ( SELECT Price = Price1 UNION
      SELECT Price2 UNION
      SELECT Price3 
    ) AS m
GROUP BY t.Id ;



SELECT t.Id,
       x.Price
FROM   
    tableX AS t
  OUTER APPLY
    ( SELECT TOP (1) Price
      FROM 
       ( SELECT Price1 UNION
         SELECT Price2 UNION  
         SELECT Price3
       ) AS m (Price)
       WHERE Price IS NOT NULL
       ORDER BY Price ASC
    ) x ;

SQL-Fiddleでテスト済み

于 2013-09-09T06:51:49.650 に答える
0

NULL の最大値を取る:

Select Id,
       Case When ISNULL(Price1,MaxPrice) < ISNULL(Price2,MaxPrice)  And ISNULL(Price1,MaxPrice)  < ISNULL(Price3,MaxPrice)  Then ISNULL(Price1,MaxPrice)
            When ISNULL(Price2,MaxPrice)  < ISNULL(Price1,MaxPrice)  And ISNULL(Price2,MaxPrice)  < ISNULL(Price3,MaxPrice)  Then ISNULL(Price2,MaxPrice)  
            Else ISNULL(Price3,MaxPrice) 
            End As TheMin
From   
    YourTable

MaxPrice を計算できる場合、または max int...

于 2013-09-09T06:46:37.740 に答える
0

してみてください:

Select Id,
       Case When Price1 < Price2 And Price1 < Price3 Then Price1
            When Price2 < Price1 And Price2 < Price3 Then Price2 
            Else Price3
            End As TheMin
From   
    YourTable

また

select 
    Id, 
    MIN(Price) TheMin
FROM
(
    select Id, Price1 Price From YourTable
    union all
    select Id, Price2 Price From YourTable
    union all
    select Id, Price3 Price From YourTable
)x group by Id
于 2013-09-09T06:43:33.760 に答える
0

この投稿を見てください。ただし、テーブルの列と行を反転し、単に min() を使用して最小値を取得できるということです。

MYSQL 行を選択しますが、行を列に、列を行にします

(リンクされた投稿のアナックスへのすべてのクレジット)

于 2013-09-09T06:51:10.787 に答える