2016-05-26 23 views
0

私は自分のクエリを持っており、相関サブクエリを使って同じ出力を得る必要があります。相関サブクエリの新機能ですので、助けてください。異なる種類の相関クエリ

元のクエリ:コメント内のすべての前後に申し訳ありません

SELECT Sales.SalesOrderHeader.CustomerID, SUM(Sales.SalesOrderDetail.LineTotal) 
FROM Sales.SalesOrderDetail 
    INNER JOIN Sales.SalesOrderHeader 
    ON Sales.SalesOrderDetail.SalesOrderID = Sales.SalesOrderHeader.SalesOrderID 
GROUP BY Sales.SalesOrderHeader.CustomerID; 
+0

テストデータベース - https://msftdbprodsamples.codeplex.com/downloads/get/880661 –

+0

クエリには19119個の出力行があります。 –

+0

"私は同じ出力と何らかの相関関係を書く必要があります。"何? – JNevill

答えて

0

。クエリのSELECT部分​​で相関サブクエリを使用して、あなたのように、また、これを書くことができます:

SELECT customerID, sum(sumOfLines) 
FROM 
    (
     SELECT header.CustomerID, 
      (SELECT sum(Detail.LineTotal) FROM Sales.SalesOrderDetail.LineTotal as Detail WHERE Detail.SalesOrderID = header.SalesOrderID) as sumOfLines 
     FROM Sales.SalesOrderHeader.CustomerID as header 
    ) sub 
GROUP BY customerID 

これはかなり醜いですし、より速く実行するつもりはありません。 DBMSが両方のバージョンで同じ実行パスを選択する可能性はかなり高いです。


アップデート:私たちは、相関サブクエリを利用して、クエリ内相関サブクエリに集約することができないので、唯一のユニークな得意先の、通ってくるようにサブクエリを使用することにより、再び集約する上記のSQLを更新しました。

+0

質問で少し修正されたエラーです。彼は31465の行を返します。重複した顧客が含まれています。 –

+0

SELECT header.CustomerID、 (詳細はSales.SalesOrderDetailを参照してください。詳細はWHERE Detail.SalesOrderID = header.SalesOrderIDをsumOfLinesとして参照してください) FROM Sales.SalesOrderHeader as header; –

+0

それは意味があります。あなたのヘッダーテーブルには重複した顧客が...私はそれを考えていたはずです。私は答えを更新しています。相関サブクエリから返された結果を集計できると思います。ここでも、元の非常にきれいなクエリよりもパフォーマンスが悪くなると思います。 – JNevill

関連する問題