2012-03-15 110 views
0

我試圖在各級官員中產生頭銜,但我只得到更詳細的頭銜。我怎樣才能糾正這個陳述?迷失在SQL查詢

目前,我得到更詳細的標題像99ABC,但我想獲得所有組合。

99--- 
99--C 
99-B- 
99A-- 
99-BC 
99A-C 
99AB- 
99ABC 


    select distinct TITLE 
    from (SELECT   
     (case when OFF3.OFFICER_ID IS NOT NULL then DEP.INDICATOR || TEA.INDICATOR || coalesce(OFF1.INDICATOR, '-') || 
     coalesce(OFF2.INDICATOR, '-') || coalesce(OFF3.INDICATOR, '-') 
     else case when OFF2.OFFICER_ID IS NOT NULL then DEP.INDICATOR || TEA.INDICATOR || coalesce(OFF1.INDICATOR, '-') || coalesce(OFF2.INDICATOR, '-') || '-' 
     else case when OFF1.OFFICER_ID IS NOT NULL then DEP.INDICATOR || TEA.INDICATOR || coalesce(OFF1.INDICATOR, '-') || '--' 
     else DEP.INDICATOR || TEA.INDICATOR || '---' end end end) as TITLE 

     FROM DEPARTMENT DEP, 
     TEAM TEA 
     LEFT OUTER JOIN OFFICER OFF1 ON OFF1.OFFICER1_TEAM_ID = TEA.TEAM_ID 
     LEFT OUTER JOIN OFFICER OFF2 ON OFF2.OFFICER2_TEAM_ID = TEA.TEAM_ID 
     LEFT OUTER JOIN OFFICER OFF3 ON OFF3.OFFICER3_TEAM_ID = TEA.TEAM_ID 

     WHERE TEA.TEAM_DEPA_ID = DEP.DEPARTMENT_ID 
      AND TEA.TEAM_MANAGER_ID IS NOT NULL 
      AND coalesce(TEA.TEAM_MANAGER_ID, OFF1.TEAM_OFFICER_ID, OFF2.TEAM_OFFICER_ID, OFF3.TEAM_OFFICER_ID) is not null) myselect 

P.S. ||用於集中操作。

回答

1

(編輯,刪除CTE)嘗試:

select distinct TITLE from 
(SELECT case title_case 
      when 0 then TITLE0 
      when 1 then TITLE1 
      when 2 then TITLE2 
      when 3 then TITLE3 
     end as TITLE 
FROM 
    (SELECT 0 title_case FROM sysibm.sysdummy1 UNION ALL 
    SELECT 1 title_case FROM sysibm.sysdummy1 UNION ALL 
    SELECT 2 title_case FROM sysibm.sysdummy1 UNION ALL 
    SELECT 3 title_case FROM sysibm.sysdummy1) tc 
    CROSS JOIN 
    (SELECT case when OFF3.OFFICER_ID IS NOT NULL 
         then DEP.INDICATOR || TEA.INDICATOR || coalesce(OFF1.INDICATOR, '-') || coalesce(OFF2.INDICATOR, '-') || coalesce(OFF3.INDICATOR, '-') 
      end as TITLE3, 
      case when OFF2.OFFICER_ID IS NOT NULL 
         then DEP.INDICATOR || TEA.INDICATOR || coalesce(OFF1.INDICATOR, '-') || coalesce(OFF2.INDICATOR, '-') || '-' 
      end as TITLE2, 
      case when OFF1.OFFICER_ID IS NOT NULL 
         then DEP.INDICATOR || TEA.INDICATOR || coalesce(OFF1.INDICATOR, '-') || '--' 
      end as TITLE1, 
      DEP.INDICATOR || TEA.INDICATOR || '---' as TITLE0 
    FROM DEPARTMENT DEP 
    JOIN TEAM TEA ON TEA.TEAM_DEPA_ID = DEP.DEPARTMENT_ID 
    LEFT JOIN OFFICER OFF1 ON OFF1.OFFICER1_TEAM_ID = TEA.TEAM_ID 
    LEFT JOIN OFFICER OFF2 ON OFF2.OFFICER2_TEAM_ID = TEA.TEAM_ID 
    LEFT JOIN OFFICER OFF3 ON OFF3.OFFICER3_TEAM_ID = TEA.TEAM_ID 
    WHERE TEA.TEAM_MANAGER_ID IS NOT NULL 
    ) mytitles 
) myselect 
+0

@標記欄杆。感謝你的回答。沒有'運營商'可以做到嗎? – Kayser 2012-03-15 09:46:40

+0

@凱瑟:是的,但答案不太容易理解。 WITH'應該是DB2 SQL的標準部分 - 爲什麼不想使用它? – 2012-03-15 09:48:56

+0

@ mark-banister我會把這個查詢放在另一個查詢中,比如'select * from(myselect)where ...'In from it is not allowed .. – Kayser 2012-03-15 09:58:06