sql join历史表到活动表SSRS报告

时间:2009-08-12 14:12:51

标签: sql sql-server sql-server-2005 reporting-services reporting

我正在尝试从数据库(sql server 2005)中提取结果,该数据库需要4个表: 订户S,会员M,ClaimLines L,ClaimHistoryLines H

查询如下:

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 L表中提取结果行,但不显示History表的结果。我不知道怎么做,任何可以提供帮助的sql专家都会很棒。 -Thanks!

2 个答案:

答案 0 :(得分:1)

  

CMC_CDDL_CL_LINE L,CMC_MEME_MEMBER M LEFT OUTER JOIN CMC_CLDH_DEN_HIST H

不要将过时的隐含连接语法与左连接混合使用。他们在一起打得不好。使用正确的ANSII标准连接语法。事实上,完全停止使用过时的语法。

答案 1 :(得分: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'