2013-02-20 4 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 составляют первичный ключ в AD1 таблице, которая связана с APDR несколько раз, используя PK выше, и каждый раз, когда он извлечь различное значение для settingID.

Желаемая Выход: AppID правило обзор text1, правило обзор text2, правило текст отзыва 8

обзор Правило Текст1 представляют 626, 2 является 1985 и 8 является 2511 и каждый представляет определенный править

+0

Какие таблицы участвуют и КН у них их структуры? Как они связаны? Как должен выглядеть конечный результат? – Oded

+0

Привет, пожалуйста, см. Замечания добавлены к вопросу. – Joe

ответ

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