2012-09-27 9 views
6

यह पहली बार मैं आपकी मदद के लिए पूछना है,गलत योग जब मैं एक दूसरी तालिका

में शामिल होने के असल में मैं एक प्रश्न बनाने के लिए, और इसके लिए एक ऐसी ही उदाहरण था। मैं दो तालिकाओं,

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 

लेकिन जब मैं दोनों प्रश्नों को जोड़ता हूं तो मुझे झूठा लगता है, मैं 1843 के खिलाफ 2 जुलाई 8362 क्यूटी पर उम्मीद करता हूं, लेकिन मुझे मिलता है:

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

क्या परिणाम के साथ गलत है जो आपको मिलता है? क्या आप कुछ नमूना डेटा और अपेक्षित परिणाम पोस्ट कर सकते हैं? – Taryn

+1

@bluefeet - यह रिपोर्ट को समझा जाएगा। प्रत्येक पंक्ति के लिए शामिल होने से प्रत्येक बार कई बार पढ़ें। –

+1

@ मार्टिनस्मिथ मैं आपसे सहमत हूं, लेकिन मैं ओपी को यह स्पष्ट करना चाहता हूं कि परिणाम के साथ समस्या क्या है। अधिक जानकारी, बेहतर। :) – Taryn

उत्तर

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 
+0

कॉलम 'ReportSummary.SumHeadCount' चुनिंदा सूची में अमान्य है क्योंकि यह या तो कुल कार्य या ग्रुप बाय क्लॉज में निहित नहीं है। – alphawt

+0

संपादित। कृपया जांचें – Prasanna

2

तो यह उपयोगी इस (RDBMS समर्थन के अधीन) से बचने का

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 
+0

हां। जवाब के लिए धन्यवाद। एसक्यूएल सर्वर 2008 – Prasanna

+0

उत्तर संपादित किया मैंने आपके विचार को लागू किया और मुझे मिल गया! बहुत बहुत धन्यवाद ^^ – alphawt

3

एक तरीका यह हो सकता है

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 
+0

का उपयोग कर उत्तर – alphawt

संबंधित मुद्दे