2012-05-29 25 views
0

我在計算分組查詢中的ID時出現問題。問題是這個查詢是根據另一個變量分組的。例如,我需要計算在發票內部訂購了多少產品,而此發票位於發送多個發票的公司內部。我希望這很清楚。無論如何,我希望一切都將與此SQL更加清晰:在分組表中計數ID

SELECT C.FULLNAME,C.COMPANY_ID,SUM(I.GROSSTOTAL) AS TOTAL, 
     SUM(I.OTHER_MONEY_VALUE/1.18) AS OTHER_TOTAL, 
     COUNT(IR.PRODUCT_ID) AS NO_PRODUCTS 
FROM COMPANY C 
JOIN #DSN2_ALIAS#.INVOICE I  ON C.COMPANY_ID=I.COMPANY_ID 
JOIN #DSN2_ALIAS#.INVOICE_ROW IR ON I.INVOICE_ID=IR.INVOICE_ID 
JOIN #DSN3_ALIAS#.PRODUCT P  ON P.PRODUCT_ID=IR.PRODUCT_ID 
JOIN #DSN3_ALIAS#.PRODUCT_CAT PC ON P.PRODUCT_CATID=PC.PRODUCT_CATID 
WHERE P.PRODUCT_ID=<cfqueryparam value="#attributes.product_id#" cfsqltype="cf_sql_integer"> 
GROUP BY C.COMPANY_ID,C.FULLNAME 
ORDER BY TOTAL DESC 

後我定義的產品ID,在輸出查詢清單公司的名單,銷售額的總和,而NO_PRODUCTS具有相同值作爲發票的數量,因爲查詢按公司_id和其全名進行分組,但每個發票內部存在多個產品,因此變量no_products被錯誤定義:(

如何獲得計數正確?

+0

您嘗試使用內查詢? – Ofer

+0

嗯,'數不清'? –

+0

@Ofer不,我不知道如何使用它:)我認爲它必須解決的情況下)) –

回答

0

我希望我明白你正在嘗試做的,對不起,如果我沒有

SELECT FULLNAME,COMPANY_ID 
FROM (
SELECT SUM(I.GROSSTOTAL) AS TOTAL, 
    SUM(I.OTHER_MONEY_VALUE/1.18) AS OTHER_TOTAL, 
    COUNT(IR.PRODUCT_ID) AS NO_PRODUCTS 
FROM COMPANY C 
JOIN #DSN2_ALIAS#.INVOICE I  ON C.COMPANY_ID=I.COMPANY_ID 
JOIN #DSN2_ALIAS#.INVOICE_ROW IR ON I.INVOICE_ID=IR.INVOICE_ID 
JOIN #DSN3_ALIAS#.PRODUCT P  ON P.PRODUCT_ID=IR.PRODUCT_ID 
JOIN #DSN3_ALIAS#.PRODUCT_CAT PC ON P.PRODUCT_CATID=PC.PRODUCT_CATID 
WHERE P.PRODUCT_ID=<cfqueryparam value="#attributes.product_id#" cfsqltype="cf_sql_integer"> 
ORDER BY TOTAL DESC) 
GROUP BY COMPANY_ID,FULLNAME 
+0

但正如你以後可以看到我需要加入這個product_id,而product_ids被計數並命名爲no_products :( –

0

您可以嘗試執行內部查詢。使用您的發票檢索產品計數。類似的東西。

SELECT C.FULLNAME,C.COMPANY_ID,SUM(I.GROSSTOTAL) AS TOTAL, 
     SUM(I.OTHER_MONEY_VALUE/1.18) AS OTHER_TOTAL,NO_PRODUCTS 
    FROM COMPANY C 
    JOIN #DSN2_ALIAS#.INVOICE I ON C.COMPANY_ID=I.COMPANY_ID 
    JOIN (select INVOICE_ID,count(PRODUCT_ID) as NO_PRODUCT from #DSN2_ALIAS#.INVOICE_ROW group by invoice_id) IR ON I.INVOICE_ID=IR.INVOICE_ID 
    JOIN #DSN3_ALIAS#.PRODUCT P ON P.PRODUCT_ID=IR.PRODUCT_ID 
    JOIN #DSN3_ALIAS#.PRODUCT_CAT PC ON P.PRODUCT_CATID=PC.PRODUCT_CATID 
    WHERE 
    P.PRODUCT_ID=<cfqueryparam value="#attributes.product_id#" cfsqltype="cf_sql_integer"> 
    GROUP BY C.COMPANY_ID,C.FULLNAME 
    ORDER BY TOTAL DESC