2013-02-20 101 views
0

我试图打印符合以下ID(626,1985,2511)的所有申请人的所有规则。SQL Server 2008中的复杂连接

它打印申请人有626作为第一条规则,但它不打印那些只有1985年和2511年没有626)。任何想法?

select DISTINCT AD1.AppID, 

MAX(CASE WHEN (APDR1.SETTINGID= 626) THEN APDR1.reviewruletext ELSE ' ' END)AS 'Rule1', 
MAX(CASE WHEN (APDR2.SETTINGID= 1985)THEN APDR2.reviewruletext ELSE ' ' END)AS 'Rule2', 
MAX(CASE WHEN (APDR8.SETTINGID= 2511) THEN APDR8.reviewruletext ELSE ' ' END)AS 'Rule8' 


from appdetail ad1 

LEFT OUTER JOIN AppPartyDetailRule APDR1 on 
    apdr1.AppID=ad1.AppID AND 
apdr1.AppDetailID= ad1.AppDetailID and 
apdr1.AppDetailSavePointID= AD1.AppDetailSavePointID AND 
ad1.AppDetailSavePointID=0 AND 
APDR1.SettingID= 626 



LEFT OUTER JOIN AppPartyDetailRule APDR2on 
ad1.appid= apdr2.appid and 
ad1.appdetailID= apdr2.appdetailID and 
ad1.appdetailsavepointid= apdr2.appdetailsavepointid and 
ad1.appdetailsavepointid= 0 AND 
APDR2.SettingID= 1985 


LEFT OUTER JOIN AppPartyDetailRule APDR8 on 
ad1.appid= apdr8.appid and 
ad1.appdetailID= apdr8.appdetailID and 
ad1.appdetailsavepointid= apdr8.appdetailsavepointid and 
ad1.appdetailsavepointid= 0 AND 
APDR8.SettingID= 2511 


group by AD1.AppID,.... etc. (more fields) 

表结构是:
的AppID,AppDetailID,AppDetailsavepointID弥补其连接至 APDR每次使用上面的PK和几次在AD1表中的主键将其解压缩为一个不同的值settingID。

所需的输出是: 的AppID审查规则的text1,审查规则文本2,综述规则文本8

审查规则文本1表示626,图2是1985年8是2511,并且每个表示一定的治

+0

涉及哪些表和WH在他们的结构?他们有什么关系?最终结果应该是什么样子? – Oded 2013-02-20 21:56:25

+0

您好oded,请参阅添加到问题的评论。 – Joe 2013-02-20 22:01:55

回答

1

我认为你可以简化您的查询:

select AD1.AppID, 
     MAX(CASE WHEN (APDR1.SETTINGID = 626) THEN APDR1.reviewruletext ELSE '' 
      END) AS 'Rule1', 
     MAX(CASE WHEN (APDR1.SETTINGID = 1985) THEN APDR1.reviewruletext ELSE '' 
      END) AS 'Rule2', 
     MAX(CASE WHEN (APDR1.SETTINGID = 2511) THEN APDR1.reviewruletext ELSE '' 
      END) AS 'Rule8' 
from appdetail ad1 LEFT OUTER JOIN 
    AppPartyDetailRule APDR1 
    on apdr1.AppID=ad1.AppID AND 
     apdr1.AppDetailID= ad1.AppDetailID and 
     apdr1.AppDetailSavePointID= AD1.AppDetailSavePointID AND 
     ad1.AppDetailSavePointID=0 
group by ad1.appID 
where APDR1.SettingID in (626, 1985, 2511) 
+0

谢谢,戈登!我会试一下 – Joe 2013-02-20 22:33:44