2012-05-22 59 views
0

我正在創建Crystal Report的過程中,但卡住了。我有一個包含20個項目的表格(Numbers),3個欄目(項目編號,每訂單價格(PPO),每件訂單(CPO))。報告應該查看我們每個商店的所有銷售訂單,按項目打印出多少收入損失或獲得的收入,如果他們在CPO下或其下面訂購的,我遇到的問題是有些商店沒有訂購20件商品中的一些,但我仍然需要這顯示了在報告收入丟了,我知道這是主要由左實現從數字表連接查詢我現在是:。Crystal Reports查詢 - 沒有得到正確的結果


SELECT x.*, z.* 
FROM NUMBERS x 
LEFT OUTER JOIN (
SELECT 
     BPCUSTOMER.BPCPYR_0 AS PayingBp, 
     BPCUSTOMER.BPCNUM_0 AS BpNumber, 
     ITMMASTER.ITMREF_0 AS ITMREF, 
     SUM(SINVOICED.NETPRI_0) AS NETPRI, 
     SUM(SINVOICED.QTY_0) AS Quantity, 
     MAX(SINVOICED.ITMDES1_0) AS DES, 
     MAX(BPADDRESS.CTY_0) AS BpCity, 
     MAX(BPADDRESS.SAT_0) AS BpState 

     FROM SINVOICED SINVOICED 
     INNER JOIN BPCUSTOMER ON SINVOICED.BPCINV_0 = BPCUSTOMER.BPCNUM_0 
     INNER JOIN ITMMASTER ON SINVOICED.ITMREF_0 = ITMMASTER.ITMREF_0 
     INNER JOIN BPADDRESS ON SINVOICED.BPCINV_0 = BPADDRESS.BPANUM_0 
     INNER JOIN BPCUSTOMER_PAY ON BPCUSTOMER.BPCINV_0 = BPCUSTOMER_PAY.BPCNUM_0 

     WHERE (ITMMASTER.TSICOD_2 = N'YE1') 
     AND (BPCUSTOMER.BPCPYR_0 > N'10110') 
     GROUP BY BPCUSTOMER.BPCPYR_0, BPCUSTOMER.BPCNUM_0, ITMMASTER.ITMREF_0 

) z ON x.[Item #] = z.ITMREF 

與此查詢,我沒有得到任何的NULL信息如果我將一個特定的商店添加到WHERE部分,它會得到正確的結果,但僅限於那個特定商店我們有超過300個商店,所以它沒有任何意義f或者我一次運行一個商店。我猜測問題是,當爲所有商店運行它時,每件商品都至少訂購了一次,因此它不顯示空字段。

希望這不是太混亂。有什麼建議麼?


他們希望報告顯示每個項目按支付bp和商店編號分組。這是一個SQL數據庫,但我從Crystal Reports中獲取了查詢,並試圖操作它以獲得正確的結果。

但我有一個請求更改。他們現在只想看看完全沒有購買的物品。我仍然試圖用NUMBERS表中的左外連接來完成此操作,並且仍然存在相同的問題。查詢我現在已經是:

SELECT "ZP_ITMMASTER"."ITMREF_0", "ZP_ITMMASTER"."ITMDES1_0", "ZP_NUMBERS"."Avg # Cases per order", "ZP_NUMBERS"."Price per order", "ZP_SDELIVERY"."BPCPYR_0", "ZP_SDELIVERY"."BPCORD_0", "ZP_NUMBERS"."Item #", "ZP_ITMMASTER"."TSICOD_2" 
FROM (("master"."dbo"."ZP_NUMBERS" "ZP_NUMBERS" LEFT OUTER JOIN "master"."dbo"."ZP_SDELIVERYD" "ZP_SDELIVERYD" ON "ZP_NUMBERS"."Item #"="ZP_SDELIVERYD"."ITMREF_0") INNER JOIN "master"."dbo"."ZP_SDELIVERY" "ZP_SDELIVERY" ON (("ZP_SDELIVERYD"."SDHNUM_0"="ZP_SDELIVERY"."SDHNUM_0") AND ("ZP_SDELIVERYD"."SOHNUM_0"="ZP_SDELIVERY"."SOHNUM_0")) AND ("ZP_SDELIVERYD"."STOFCY_0"="ZP_SDELIVERY"."STOFCY_0")) INNER JOIN "master"."dbo"."ZP_ITMMASTER" "ZP_ITMMASTER" ON "ZP_SDELIVERYD"."ITMREF_0"="ZP_ITMMASTER"."ITMREF_0" 
WHERE "ZP_ITMMASTER"."TSICOD_2"=N'YE1' 
ORDER BY "ZP_SDELIVERY"."BPCPYR_0", "ZP_SDELIVERY"."BPCORD_0", "ZP_ITMMASTER"."ITMREF_0" 

謝謝!

+0

爲什麼在「BPCUSTOMER.BPCPYR_0」和「BPCUSTOMER.BPCNUM_0」上進行分組,有沒有特別的原因?看起來你只想要'ITMMASTER.ITMREF_0',因爲它是唯一的連接字段,並且是列表中的最後一個字段。 – craig

+0

什麼是您的數據庫?不確定這是否是Crystal問題。 – paulmelnikow

回答

0

我同意@noa,我不認爲這是一個水晶問題,更可能是一個SQL查詢問題。也就是說,如果每家商品至少一次被300家商店中的一家購買過,那麼我懷疑您可能會在您的聲明中提到有關爲所有商店同時投放商品的信息。

如果您在數字表和「商店」表之間使用cross join以在數字和商店之間創建笛卡爾積,該怎麼辦?也就是說,這300個商店中的每一個的每個商品編號都有一個記錄。通常我不會推薦這種方法,但由於我們談論的實體數量相對較少,因此這可能會起到一些作用。

取交叉連接的結果,並針對您的問題中包含的子查詢執行連接,只有這一次不僅加入項目#,還加入商店標識。通過加入商店ID,您可以隔離每家商店銷售的產品。