[英]complex joins in SQL Server 2008
我正在尝试为所有符合以下ID(626,1985,2511)的申请人打印所有规则。
它会打印出具有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构成AD1表中的主键,该主键使用上面的PK几次链接到APDR,并且每次它为setID提取不同的值。
所需的输出是:AppID审查规则文本1,审查规则文本2,审查规则文本8
review Rule Text1代表626,2代表1985,8代表2511,每个代表特定规则
我认为您可以将查询简化为:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.