0

我試圖從數據庫(SQL Server 2005),這需要4臺牽引結果: 認購S,會員男,ClaimLines L,ClaimHistoryLines^hSQL JOIN記錄表中的活動表SSRS報告

查詢如下:

select S.SBSB_ID, M.MEME_NAME, 
(CASE L.CLCL_ID WHEN '' THEN H.CLCL_ID ELSE L.CLCL_ID END) AS CLAIM_ID 
FROM CMC_CDDL_CL_LINE L, CMC_MEME_MEMBER M LEFT OUTER JOIN CMC_CLDH_DEN_HIST H 
ON H.MEME_CK = M.MEME_CK, CMC_SBSB_SUBSC S 
WHERE 
S.SBSB_ID = '120943270' AND 
L.MEME_CK = M.MEME_CK AND 
M.SBSB_CK = S.SBSB_CK 

該查詢成功地拉動從ClaimLines大號表中的結果行,但沒有從歷史記錄表顯示結果。我不知道如何做到這一點,任何可以幫助的sql專家都會很棒。 -謝謝!

回答

0

這是我的一個非常愚蠢的錯誤。我忽略了使用UNION解決了我的問題,並允許我從兩個地方拖入一個結果集而不創建大量重複行。很高興有人指出使用ANSII標準編寫sql的正確方法。

select S.SBSB_ID, M.MEME_NAME, 
L.CLCL_ID AS CLAIM_ID 
FROM 
CMC_SBSB_SUBSC S INNER JOIN CMC_MEME_MEMBER M ON S.SBSB_CK = M.SBSB_CK 
INNER JOIN CMC_CDDL_CL_LINE L ON L.MEME_CK = M.MEME_CK 
WHERE 
S.SBSB_ID = '120943270' 
UNION 
select S.SBSB_ID, M.MEME_NAME, 
H.CLCL_ID AS CLAIM_ID 
FROM 
CMC_SBSB_SUBSC S INNER JOIN CMC_MEME_MEMBER M ON S.SBSB_CK = M.SBSB_CK 
INNER JOIN CMC_CLDH_DEN_HIST H ON H.MEME_CK = M.MEME_CK 
WHERE 
S.SBSB_ID = '120943270' 
1

CMC_CDDL_CL_LINE L,CMC_MEME_MEMBER m左側OUTER JOIN CMC_CLDH_DEN_HIST^h

不要混用過時的隱含聯接語法與左連接。他們在一起打球不好。使用正確的ANSII標準連接語法。實際上完全停止使用陳舊的語法。

+0

選擇S.SBSB_ID,M.MEME_NAME,(CASE WHEN L.CLCL_ID '' THEN ELSE H.CLCL_ID END L.CLCL_ID)AS CLAIM_ID FROM CMC_SBSB_SUBSC內在JOIN CMC_MEME_MEMBER M於S.SBSB_CK = M.SBSB_CK INNER JOIN CMC_CDDL_CL_LINE L ON L.MEME_CK = M.MEME_CK LEFT OUTER JOIN CMC_CLDH_DEN_HIST H ON H.MEME_CK = M.MEME_CK WHERE S.SBSB_ID ='120943270' - 我重寫了上述查詢,現在是ANSII標準格式?仍然存在與結果集相同的問題 – 2009-08-12 14:53:22

+0

您確定您的數據結果集有任何記錄:L.CLCL_ID ='' – HLGEM 2009-08-12 15:00:34