显示不存在的行

时间:2016-01-26 10:25:27

标签: sql sql-server tsql join outer-join

我有一个为我提取一些数据的选择。 我正在尝试创建一个向我显示数据的查询,但如果它不存在,它将向我显示前5列我提供的数据。这是查询

  DECLARE @miesiac INT = 1
  DECLARE @opis VARCHAR(30) = '';
  WITH  cte
          AS ( SELECT  DISTINCT
                        ROW_NUMBER() OVER ( PARTITION BY emp_name,
                                         doc_documentdate ORDER BY doc_documentdate ) s
                       ,emp_name Kod
                       ,emp_id id
                       ,Emp_Surname Nazwisko
                       ,Emp_FirstName Imie
                       ,ISNULL(CONVERT(VARCHAR(10), Doc_DocumentDate, 120), '') Data
                       ,CASE WHEN doc_documentdate = ttc_date
                                  AND ttc_isholiday = 0 THEN 'S'
                             WHEN doc_documentdate = ttc_date
                                  AND ttc_isholiday = 6
                                  OR ttc_isholiday = 7
                                  OR ELM_DecimalColumn1 = 0 THEN 'W'
                             WHEN ELM_DecimalColumn1 IS NULL THEN 'w'
                             ELSE 'P'
                        END Typdnia
                       ,ISNULL(CONVERT(VARCHAR(8), elm_datecolumn1, 108),
                               '00:00:00') GodzOd
                       ,ISNULL(CONVERT(VARCHAR(8), elm_datecolumn2, 108),
                               '00:00:00') GodzDo
                       ,CASE WHEN ELM_decimalcolumn1 > 0
                             THEN 'praca podstawowa'
                             ELSE 'brak'
                        END Strefa
                       ,@opis Opis
                       ,ISNULL(emp_shortstringcolumn2, 'brak') Wydzial
                       ,ISNULL(ELM_ShortStringColumn5, '0') Wydzial_adres_wezla
                       ,ISNULL(a.dic_svalue, ' brak') Projekt
                       ,ISNULL(b.DIC_ShortStringColumn1, '1') Projekt_adres_wezla
               FROM     Employees
                        LEFT JOIN elements ON emp_id = ELM_EmpID
                                              AND ELM_FflID = 200
                        LEFT JOIN documents ON elm_objectid = doc_id
                                               AND Doc_DdfID = 2
                        LEFT JOIN dictionaries a ON ELM_IntColumn2 = a.DIC_ID
                        LEFT JOIN Dictionaries b ON elm_intcolumn2 = b.DIC_ID
                        LEFT JOIN ttscalendar ON ttc_date = Doc_DocumentDate
                        RIGHT JOIN dim_timeday ON doc_documentdate = tmd_fulldatekey
             )
    SELECT  ISNULL(cte1.kod, '') Kod
           ,ISNULL(cte1.nazwisko, '') Nazwisko
           ,ISNULL(cte1.imie, '') Imie
           ,ISNULL(cte1.data, '') Data
           ,ISNULL(cte1.TypDnia, '') Typdnia
           ,ISNULL(cte1.GodzOd, '00:00') W1_GodzOd
           ,ISNULL(cte1.godzdo, '00:00') W1_GodzDo
           ,ISNULL(cte1.strefa, 'brak') W1_Strefa
           ,ISNULL(cte1.opis, '') W1_Opis
           ,ISNULL(cte1.wydzial, 'brak') W1_Wydzial
           ,ISNULL(cte1.wydzial_adres_wezla, '0') W1_Wydzial_adres_wezla
           ,ISNULL(cte1.Projekt, 'brak') W1_Projekt
           ,ISNULL(cte1.Projekt_adres_wezla, '1') W1_Projekt_adres_wezla
           ,ISNULL(cte2.GodzOd, '') W2_GodzOd
           ,ISNULL(cte2.godzdo, '') W2_GodzDo
           ,ISNULL(cte2.strefa, '') W2_Strefa
           ,ISNULL(cte2.opis, '') W2_Opis
           ,ISNULL(cte2.wydzial, '') W2_Wydzial
           ,ISNULL(cte2.wydzial_adres_wezla, '') W2_Wydzial_adres_wezla
           ,ISNULL(cte2.Projekt, '') W2_Projekt
           ,ISNULL(cte2.Projekt_adres_wezla, '') W2_Projekt_adres_wezla
           ,ISNULL(cte3.GodzOd, '') W3_GodzOd
           ,ISNULL(cte3.godzdo, '') W3_GodzDo
           ,ISNULL(cte3.strefa, '') W3_Strefa
           ,ISNULL(cte3.opis, '') W3_Opis
           ,ISNULL(cte3.wydzial, '') W3_Wydzial
           ,ISNULL(cte3.wydzial_adres_wezla, '') W3_Wydzial_adres_wezla
           ,ISNULL(cte3.Projekt, '') W3_Projekt
           ,ISNULL(cte3.Projekt_adres_wezla, '') W3_Projekt_adres_wezla
           ,ISNULL(cte4.GodzOd, '') W4_GodzOd
           ,ISNULL(cte4.godzdo, '') W4_GodzDo
           ,ISNULL(cte4.strefa, '') W4_Strefa
           ,ISNULL(cte4.opis, '') W4_Opis
           ,ISNULL(cte4.wydzial, '') W4_Wydzial
           ,ISNULL(cte4.wydzial_adres_wezla, '') W4_Wydzial_adres_wezla
           ,ISNULL(cte4.Projekt, '') W4_Projekt
           ,ISNULL(cte4.Projekt_adres_wezla, '') W4_Projekt_adres_wezla
           ,ISNULL(cte5.GodzOd, '') W5_GodzOd
           ,ISNULL(cte5.godzdo, '') W5_GodzDo
           ,ISNULL(cte5.strefa, '') W5_Strefa
           ,ISNULL(cte5.opis, '') W5_Opis
           ,ISNULL(cte5.wydzial, '') W5_Wydzial
           ,ISNULL(cte5.wydzial_adres_wezla, '') W5_Wydzial_adres_wezla
           ,ISNULL(cte5.Projekt, '') W5_Projekt
           ,ISNULL(cte5.Projekt_adres_wezla, '') W5_Projekt_adres_wezla
           ,ISNULL(cte6.GodzOd, '') W6_GodzOd
           ,ISNULL(cte6.godzdo, '') W6_GodzDo
           ,ISNULL(cte6.strefa, '') W6_Strefa
           ,ISNULL(cte6.opis, '') W6_Opis
           ,ISNULL(cte6.wydzial, '') W6_Wydzial
           ,ISNULL(cte6.wydzial_adres_wezla, '') W6_Wydzial_adres_wezla
           ,ISNULL(cte6.Projekt, '') W6_Projekt
           ,ISNULL(cte6.Projekt_adres_wezla, '') W6_Projekt_adres_wezla
    FROM    cte cte1
            LEFT JOIN cte cte2 ON cte1.Kod = cte2.kod
                                  AND cte1.data = cte2.data
                                  AND cte2.s = 2
            LEFT JOIN cte cte3 ON cte2.Kod = cte3.kod
                                  AND cte2.data = cte3.data
                                  AND cte3.s = 3
            LEFT JOIN cte cte4 ON cte3.Kod = cte4.kod
                                  AND cte3.data = cte4.data
                                  AND cte4.s = 4
            LEFT JOIN cte cte5 ON cte4.Kod = cte5.kod
                                  AND cte4.data = cte5.data
                                  AND cte5.s = 5
            LEFT JOIN cte cte6 ON cte5.Kod = cte6.kod
                                  AND cte5.data = cte6.data
                                  AND cte6.s = 6
    WHERE   cte1.s = 1
            AND MONTH(cte1.data) = @Miesiac
            AND cte1.id = 7
    ORDER BY cte1.data
           ,cte1.kod

这是数据

 ANJO_141   ANTONKIEWICZ    JOLANTA 2016-01-22  S   00:00:00    00:00:00    brak        NF  1.8  brak   1
ANJO_141    ANTONKIEWICZ    JOLANTA 2016-01-23  W   07:00:00    12:00:00    praca podstawowa        NF  1.8  brak   1
ANJO_141    ANTONKIEWICZ    JOLANTA 2016-01-27  P   07:00:00    15:00:00    praca podstawowa        NF  1.8  brak   1
ANJO_141    ANTONKIEWICZ    JOLANTA 2016-01-28  W   00:00:00    00:00:00    brak        NF  1.8  brak   1

0 个答案:

没有答案