問題

私は2つの異なる製品の最小、最大、avgと合計を返すクエリを持っています。しかし、クライアントは、両方の製品の最小、最大、avg、および合計を組み合わせたいと考えています。しかし、私は2つの製品を合計し、日付を集計しようとすると、望ましくない結果が返されます。

次のSQLクエリは、両方の製品の個々のデータを返します。

 SELECT 
   CONVERT(date, DateTimeNow) AS Date,
   MIN(FT1) AS Minimum1 , 
   MAX(FT1) AS Maximum1, 
   AVG(FT1) AS Average1, 
   MAX(FQ1) AS Total1,
   MIN(FT2) AS Minimum2, 
   MAX(FT2) AS Maximum2, 
   AVG(FT2) AS Average2, 
   MAX(FQ2) AS Total2
FROM Data
GROUP BY CONVERT(date, DateTimeNow)
ORDER BY CONVERT(date, DateTimeNow);
 

次に、クエリを次のように変更しました。

 SELECT 
    CONVERT(date, DateTimeNow) AS Date,
    MIN(FT1+FT2) AS Minimum , 
    MAX(FT1+FT2) AS Maximum, 
    AVG(FT1+FT2) AS Average, 
    MAX(FQ1+FT2) AS Total
FROM Data
GROUP BY CONVERT(date, DateTimeNow)
ORDER BY CONVERT(date, DateTimeNow);
 

しかし、2番目のクエリを実行すると、結果は追加されません。例として、最小値は最初のクエリMinimum1 + Minimum2に追加されません

  ベストアンサー

私はあなたが同じテーブルの別の列に各製品を格納していることを理解しています。結合された最小、平均、最大値を計算するロジックは次のようになります。

 SELECT 
    CONVERT(date, DateTimeNow) AS Date,
    CASE WHEN MIN(FT1) < MIN(FT2) THEN MIN(FT1) ELSE MIN(FT2) END AS Minimum, 
    CASE WHEN MAX(FT1) > MAX(FT2) THEN MAX(FT1) ELSE MAX(FT2) END AS Maximum, 
    ( AVG(FT1) + AVG(FT2) ) / 2 AS Average,
    SUM(FT1) + SUM(FT2) AS Total
FROM Data
GROUP BY CONVERT(date, DateTimeNow)
ORDER BY CONVERT(date, DateTimeNow);
 

意味:

  • 最小値は、製品1の最小値と製品2の最小値の間の最低値です
  • 最大値は、製品1の最大値と製品2の最大値の間の最大値です。
  • 平均は製品1の平均と製品2の平均です
  • 合計は両方のクエリの合計です

必要に応じてこれらの規則を適応させることができます(完全には指定されていません)。

  同じタグがついた質問を見る

sqlsql-servertsql