6

お手伝いをお願いするのは初めてですが、

実際には、クエリを作成する必要があり、同様の例を実行しました。私は2つのテーブルを持っています、

Report (ReportID, Date, headCount)
Production(ProdID, ReportID, Quantity)

私の質問はこのクエリを使用しています。間違った結果が得られます。

SELECT    
    Report.date, 
    SUM(Report.HeadCount) AS SumHeadCount, 
    SUM(Production.Quantity) AS SumQuantity
FROM         
    Report 
INNER JOIN
    Production ON Report.ReportID = Production.ReportID
GROUP BY
    Date
ORDER BY
    Date

いくつかの行が複数回カウントされているようですが、手を貸していただけますか?

編集

日ごとにグループ化された人数の合計を取得するクエリを実行すると、次のようになります。

  date        Headcount
7/2/2012    1843
7/3/2012    1802
7/4/2012    1858
7/5/2012    1904

生産数量についても次のようになります。

2012-07-02  8362
2012-07-03  8042
2012-07-04  8272
2012-07-05  9227

しかし、両方のクエリを組み合わせると、偽のクエリが返され、7 月 2 日に 1843 に対して 8362 数量になると予想されますが、次のようになります。

 day      TotalHeadcount    totalQty
7/2/2012    6021    8362
7/3/2012    7193    8042
7/4/2012    6988    8272
7/5/2012    7197    9227
4

4 に答える 4

3

これを回避する 1 つの方法 (RDBMS サポートの対象) は次のとおりです。

WITH R
     AS (SELECT *,
                Sum(HeadCount) OVER (PARTITION BY date) AS SumHeadCount
         FROM   Report)
SELECT R.date,
       SumHeadCount,
       Sum(P.Quantity) AS SumQuantity
FROM   R
       JOIN Production P
         ON R.ReportID = P.ReportID
GROUP  BY R.date, SumHeadCount
ORDER  BY R.date 
于 2012-09-27T12:11:34.640 に答える
2

これは役に立つかもしれません

SELECT Report.ReportDate,
       Sum(Report.HeadCount) AS SumHeadCount,
       ProductionSummary.SumQuantity
FROM   Report
       INNER JOIN (SELECT ReportID,
                          Sum(Production.Quantity) AS SumQuantity
                   FROM   Production
                   GROUP  BY ReportID) AS ProductionSummary
         ON Report.ReportID = ProductionSummary.ReportID
GROUP  BY ReportDate
ORDER  BY ReportDate 
于 2012-09-27T12:08:50.440 に答える
1

以下を使用して、日付ごとにレコードをグループ化します

SELECT ReportSummary.ReportDate, SUM(ReportSummary.SumHeadCount) AS SumHeadCount, SUM(ProductionSummary.SumQuantity) AS SumQuantity
FROM
(
  SELECT Report.ReportDate, SUM(Report.HeadCount) AS SumHeadCount
  FROM Report 
  GROUP BY Report.ReportDate
) AS ReportSummary
INNER JOIN
(
  SELECT Report.ReportDate, Sum(Production.Quantity) AS SumQuantity
  FROM Production
  INNER JOIN Report 
  ON Report.ReportID = Production.ReportID
  GROUP BY Report.ReportDate
) AS ProductionSummary
ON ReportSummary.ReportDate = ProductionSummary.ReportDate
GROUP BY ReportSummary.ReportDate
ORDER BY ReportSummary.ReportDate
于 2012-09-27T12:34:47.267 に答える