Witam, mam problem z uzyskaniem prawidłowego wyniku w zapytaniu SQL.
Wynik widoczny w załączniku numer jeden.
Chciałabym aby trzy widoczne wiersze złączyły się w jeden, a tym samym uniknąć kolumn z wartościami NULL.
Oczekiwany wynik:
16 | Abonament RTK_ECC076256 | REBY | 1 | 1680,96 | 110 | 110 | NIE |
Generalnie zapytanie jest dość długie, nie wiem, który fragment należy umieścić aby spojrzenie na problem było klarowniejsze.
Dlatego też, wkleję całe zapytanie do bazy.
SELECT DISTINCT
WSZYSTKO.PRODUKT AS TOWAR ,
WSZYSTKO.MAGAZYN_ID AS MAGAZYN ,
WSZYSTKO.ilość ,
WSZYSTKO.netto ,
WSZYSTKO.ILOSC_DNI_OD_OSTATNIEGO_DOKUMENTU ,
WSZYSTKO.ILOSC_DNI_NA_MAGAZYNIE ,
WSZYSTKO.CZY_ARCHIWALNY
FROM ( SELECT DISTINCT TABELA.PRODUKT_INDEKS ,
TABELA.PRODUKT ,
TABELA.MAGAZYN_ID ,
TABELA.ilość ,
TABELA.netto ,
NULL AS ILOSC_DNI_OD_OSTATNIEGO_DOKUMENTU ,
NULL AS ILOSC_DNI_NA_MAGAZYNIE ,
TABELA.CZY_ARCHIWALNY
FROM ( SELECT DISTINCT m.PRODUKT_INDEKS AS PRODUKT_INDEKS ,
produkt.PRODUKT AS PRODUKT ,
m.MAGAZYN_ID AS MAGAZYN_ID ,
SUM(m.ZS_Ilość) AS ilość ,
SUM(m.ZS_Netto) AS netto ,
produkt.CZY_ARCHIWALNY
FROM CSTMP_B_MAGAZYNY AS m
LEFT OUTER JOIN CSTMP_B_MAGAZYN AS mag ON mag.MAGAZYN_ID = m.MAGAZYN_ID
LEFT OUTER JOIN CSTMP_B_PRODUKT AS produkt ON produkt.PRODUKT_INDEKS = m.PRODUKT_INDEKS
WHERE ( m.BRANŻA_ID = 'E' )
GROUP BY m.PRODUKT_INDEKS ,
produkt.PRODUKT ,
m.MAGAZYN_ID ,
produkt.CZY_ARCHIWALNY
HAVING ( SUM(m.ZS_Ilość) <> 0 )
AND ( SUM(m.ZS_Netto) <> 0 )
) AS TABELA
GROUP BY TABELA.PRODUKT_INDEKS ,
TABELA.PRODUKT ,
TABELA.MAGAZYN_ID ,
TABELA.ilość ,
TABELA.netto ,
TABELA.CZY_ARCHIWALNY
UNION all
SELECT DISTINCT PRODUKT_INDEKS ,
PRODUKT ,
NULL AS MAGAZYN_ID ,
NULL AS ILOŚĆ ,
NULL AS NETTO ,
ILOSC_DNI_OD_OSTATNIEGO_DOKUMENTU ,
NULL AS ILOSC_DNI_NA_MAGAZYNIE ,
NULL AS CZY_ARCHIWALNY
FROM ( SELECT DISTINCT t1a.PRODUKT_INDEKS ,
t2.PRODUKT ,
t1a.dni AS ILOSC_DNI_OD_OSTATNIEGO_DOKUMENTU
FROM ( SELECT DISTINCT PRODUKT_INDEKS ,
MIN(Dni) AS dni
FROM ( SELECT DISTINCT s.PRODUKT_INDEKS ,
pro.PRODUKT ,
DATEDIFF(d, s.DATA_DOK, GETDATE()) AS Dni
FROM CSTMP_B_SPRZEDAŻ AS s
INNER JOIN CSTMP_B_PRODUKT
AS pro ON pro.PRODUKT_INDEKS = s.PRODUKT_INDEKS
WHERE ( s.BRANŻA_ID = 'E' )
AND ( s.DATA_SPRZEDAŻY > 2016
- 12 - 31 )
) AS t1
GROUP BY PRODUKT_INDEKS
) AS t1a
INNER JOIN ( SELECT DISTINCT s.PRODUKT_INDEKS ,
pro.PRODUKT ,
DATEDIFF(d, s.DATA_DOK, GETDATE()) AS Dni
FROM CSTMP_B_SPRZEDAŻ AS s
INNER JOIN CSTMP_B_PRODUKT
AS pro ON pro.PRODUKT_INDEKS = s.PRODUKT_INDEKS
WHERE ( s.BRANŻA_ID = 'E' )
AND ( s.DATA_SPRZEDAŻY > 2016
- 12 - 31 )
) AS t2 ON t2.Dni = t1a.dni
AND t2.PRODUKT_INDEKS = t1a.PRODUKT_INDEKS
) AS TABLICA2
GROUP BY TABLICA2.PRODUKT_INDEKS ,
TABLICA2.PRODUKT ,
TABLICA2.ILOSC_DNI_OD_OSTATNIEGO_DOKUMENTU
UNION ALL
SELECT DISTINCT PRODUKT_INDEKS ,
PRODUKT ,
NULL AS MAGAZYN_ID ,
NULL AS ILOŚĆ ,
NULL AS NETTO ,
NULL AS DNI_OD_OSTATNIEGO_DOKUMENTU ,
ILOSC_DNI_NA_MAGAZYNIE ,
NULL AS CZY_ARCHIWALNY
FROM ( SELECT DISTINCT tab1a.PRODUKT_INDEKS ,
tab2.PRODUKT ,
tab1a.Dni AS ILOSC_DNI_NA_MAGAZYNIE
FROM ( SELECT DISTINCT PRODUKT_INDEKS ,
MIN(Dni) AS Dni
FROM ( SELECT DISTINCT M.PRODUKT_INDEKS ,
pro.PRODUKT ,
DATEDIFF(d, M.DATA, GETDATE()) AS Dni
FROM CSTMP_B_MAGAZYNY AS M
INNER JOIN CSTMP_B_PRODUKT
AS pro ON pro.PRODUKT_INDEKS = M.PRODUKT_INDEKS
WHERE ( M.BRANŻA_ID = 'E' )
AND ( M.DATA > 2016
- 12 - 31 )
) AS tab1
GROUP BY PRODUKT_INDEKS
) AS tab1a
INNER JOIN ( SELECT DISTINCT M.PRODUKT_INDEKS ,
pro.PRODUKT ,
DATEDIFF(d, M.DATA, GETDATE()) AS Dni
FROM CSTMP_B_MAGAZYNY AS M
INNER JOIN CSTMP_B_PRODUKT
AS pro ON pro.PRODUKT_INDEKS = M.PRODUKT_INDEKS
WHERE ( M.BRANŻA_ID = 'E' )
AND ( M.DATA > 2016 - 12
- 31 )
) AS tab2 ON tab2.Dni = tab1a.Dni
AND tab2.PRODUKT_INDEKS = tab1a.PRODUKT_INDEKS
) AS TABELA3
GROUP BY TABELA3.PRODUKT_INDEKS ,
TABELA3.PRODUKT ,
TABELA3.ILOSC_DNI_NA_MAGAZYNIE
) AS WSZYSTKO
GROUP BY WSZYSTKO.ILOSC_DNI_OD_OSTATNIEGO_DOKUMENTU ,
WSZYSTKO.PRODUKT_INDEKS ,
WSZYSTKO.PRODUKT ,
WSZYSTKO.MAGAZYN_ID ,
WSZYSTKO.ilość ,
WSZYSTKO.netto ,
WSZYSTKO.ILOSC_DNI_NA_MAGAZYNIE ,
WSZYSTKO.CZY_ARCHIWALNY
ORDER BY WSZYSTKO.PRODUKT
Pozdrawiam serdecznie,
Wlina