Zapytanie SQL - trzy zapytania w jednym,dwa odwołania do tej samej tabeli

Zapytanie SQL - trzy zapytania w jednym,dwa odwołania do tej samej tabeli
HI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1862
0

Witam

Czy możecie mi podpowiedzieć jak (o ile jest to możliwe) z tych trzech zapytań zrobić jedno ?
Kombinowałem coś z aliasami, ale nie dało oczekiwanego efektu...

Kopiuj
 
SELECT SUM(ILOSC) AS 'ILOSC P'  FROM [CENTRALA].[dbo].[eMAGLinie] JOIN [CENTRALA].[dbo].[eMAG] ON IdDok=ID WHERE Kod LIKE ('1000')  AND mId=9 AND Rodzaj IN ('PZ', 'MM+', 'PW')

SELECT SUM(ILOSC) AS 'ILOSC R' FROM [CENTRALA].[dbo].[eMAGLinie]  JOIN [CENTRALA].[dbo].[eMAG] ON IdDok=ID WHERE Kod LIKE ('1000')  AND mId=9 AND Rodzaj IN ('WZ', 'MM-', 'RW', 'ZD')

SELECT SUM(ILOSC) AS 'ILOSC S' FROM [CENTRALA].[dbo].[eFPALinie] JOIN [CENTRALA].[dbo].[eFPA] ON IdDok=ID WHERE Kod LIKE ('1000')  AND mId=9

Z góry dziękuję za pomoc.

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
1
Kopiuj
SELECT SUM(CASE WHEN Rodzaj IN ('PZ', 'MM+', 'PW') THEN ILOSC END) AS 'ILOSC P', SUM(CASE WHEN Rodzaj IN ('WZ', 'MM-', 'RW', 'ZD') THEN ILOSC END) AS 'ILOSC R'  FROM [CENTRALA].[dbo].[eMAGLinie] JOIN [CENTRALA].[dbo].[eMAG] ON IdDok=ID WHERE Kod LIKE ('1000')  AND mId=9 

Tego trzeciego się nie da, bo to inna tabela. Ale być może się da - Ty znasz strukturę lepiej (być może łączą się 1:1)

HI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1862
0

Na podstawie porady @Marcin.Miga stworzyłem takie zapytanie:

Kopiuj
SELECT
SUM(CASE WHEN efpa.mId LIKE ('1') THEN ILOSC END) AS 'RAABEGO',
SUM(CASE WHEN efpa.mId LIKE ('2') THEN ILOSC END) AS 'OKRZEI',
SUM(CASE WHEN efpa.mId LIKE ('3') THEN ILOSC END) AS 'NADBYSTRZYCKA',
SUM(CASE WHEN efpa.mId LIKE ('4') THEN ILOSC END) AS 'BUKOWA 15',
SUM(CASE WHEN efpa.mId LIKE ('5') THEN ILOSC END) AS 'KIEPURY',
SUM(CASE WHEN efpa.mId LIKE ('6') THEN ILOSC END) AS 'GLUSK',
SUM(CASE WHEN efpa.mId LIKE ('7') THEN ILOSC END) AS 'POGODNA',
SUM(CASE WHEN efpa.mId LIKE ('8') THEN ILOSC END) AS 'NOWY SIWAT',
SUM(CASE WHEN efpa.mId LIKE ('9') THEN ILOSC END) AS 'KRASNICKA',
SUM(CASE WHEN efpa.mId LIKE ('10') THEN ILOSC END) AS 'TURKA'
FROM [CENTRALA].[dbo].[efpa]
JOIN [CENTRALA].[dbo].[efpalinie] ON efpa.Id=eFPALinie.IdDok
WHERE (efpa.DATA BETWEEN '2013-01-01' AND '2013-02-02') AND efpalinie.Kod LIKE '1001'

Mam jeszcze jeden problem... nie mam pomysłu w jaki je przerobić aby wyświetlić dane o więcej niż jednym towarze...
Jeżeli zamienię efpalinie.Kod LIKE '1001' na np. efpalinie.Kod IN '1001,1002,1003' to pokaże mi sumę sprzedaży tych trzech towarów, a chciałbym żeby pokazało sumy w rozbiciu na towary.

PD
  • Rejestracja: dni
  • Ostatnio: dni
1
Kopiuj
SELECT
efpalinie.Kod,
SUM(CASE WHEN efpa.mId LIKE ('1') THEN ILOSC END) AS 'RAABEGO',
SUM(CASE WHEN efpa.mId LIKE ('2') THEN ILOSC END) AS 'OKRZEI',
SUM(CASE WHEN efpa.mId LIKE ('3') THEN ILOSC END) AS 'NADBYSTRZYCKA',
SUM(CASE WHEN efpa.mId LIKE ('4') THEN ILOSC END) AS 'BUKOWA 15',
SUM(CASE WHEN efpa.mId LIKE ('5') THEN ILOSC END) AS 'KIEPURY',
SUM(CASE WHEN efpa.mId LIKE ('6') THEN ILOSC END) AS 'GLUSK',
SUM(CASE WHEN efpa.mId LIKE ('7') THEN ILOSC END) AS 'POGODNA',
SUM(CASE WHEN efpa.mId LIKE ('8') THEN ILOSC END) AS 'NOWY SIWAT',
SUM(CASE WHEN efpa.mId LIKE ('9') THEN ILOSC END) AS 'KRASNICKA',
SUM(CASE WHEN efpa.mId LIKE ('10') THEN ILOSC END) AS 'TURKA'
FROM [CENTRALA].[dbo].[efpa]
JOIN [CENTRALA].[dbo].[efpalinie] ON efpa.Id=eFPALinie.IdDok
WHERE (efpa.DATA BETWEEN '2013-01-01' AND '2013-02-02') AND efpalinie.Kod IN ('1001', '1002', '1003')
GROUP BY efpalinie.Kod

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.