2

このクエリは私にとってはうまくいきます。

SELECT (SUM(AveragePrice)/COUNT(1)) AS AveragePrice, SUM(ItemsSold) AS ItemSold ,(SUM(AveragePrice * ItemsSold)) AS TotalSale FROM dbo.tbl_ProductSales
WHERE ProductID IN ( SELECT ProductID FROM tbl_ProductPostions WHERE tbl_ProductPostions.SearchID=3 AND SaleDate='2012-02-02 00:00:00.000')
GROUP BY SaleDate 

そして、このような結果に
なります。アイテム販売 | トータルセール

10 | 2 | 2000年

しかし、このクエリをこのように埋め込むと

SELECT * ,(SELECT (SUM(AveragePrice)/COUNT(1)) AS AveragePrice, SUM(ItemsSold) AS ItemSold ,(SUM(AveragePrice * ItemsSold)) AS TotalSale FROM dbo.tbl_ProductSales
WHERE ProductID IN ( SELECT ProductID FROM tbl_ProductPostions WHERE tbl_ProductPostions.SearchID=tbl_SearchParameters.SearchID AND SaleDate='2012-02-02 00:00:00.000')
GROUP BY SaleDate )
FROM tbl_SearchParameters  

このようなエラーが発生しました。サブクエリが EXISTS で導入されていない場合、選択リストに指定できる式は 1 つだけです。

私は限界を超えていることを知っていますが、これを行う別の方法はありますか. このタスクを実行するために関数を作成できることを知っています。しかし、これを計算するために 3 つの関数を個別に作成して、これらの集計平均価格、販売アイテム、総販売額を計算することが不可欠ですか? 1 つのクエリで 3 つの集計を計算できると確信していますが、誰かが私に適切な解決策を提案できますか? これらの集計ごとに 3 つの関数を個別に作成することに乗りたいだけです。よろしく。

4

2 に答える 2

1

APPLY()演算子を使用できます

SELECT *
FROM tbl_SearchParameters p
  CROSS APPLY (
               SELECT SUM(AveragePrice/COUNT(1)) AS AveragePrice, 
                      SUM(ItemsSold) AS ItemSold,               
                      SUM(AveragePrice * ItemsSold) AS TotalSale 
               FROM dbo.tbl_ProductSales
               WHERE ProductID IN (SELECT ProductID 
                                   FROM tbl_ProductPostions 
                                   WHERE tbl_ProductPostions.SearchID = p.SearchID           
                                     AND SaleDate='2012-02-02 00:00:00.000')
               GROUP BY SaleDate
               ) o
于 2013-03-19T12:03:03.193 に答える
0

次のように 2 番目の SELECT を削除してみてください。

SELECT * ,(SUM(AveragePrice)/COUNT(1)) AS AveragePrice, 
           SUM(ItemsSold) AS ItemSold ,
          (SUM(AveragePrice * ItemsSold)) AS TotalSale 
FROM dbo.tbl_ProductSales
WHERE ProductID IN (SELECT ProductID 
                    FROM tbl_ProductPostions 
                    WHERE tbl_ProductPostions.SearchID=tbl_SearchParameters.SearchID 
                    AND SaleDate='2012-02-02 00:00:00.000')
GROUP BY SaleDate )
FROM tbl_SearchParameters
于 2013-03-19T11:09:37.277 に答える