Dariusz Szyndler

Dariusz Szyndler Właściciel, Jump.Net

Temat: kwerenda "wyliczająca"

Witam serdecznie.
Szukam rozwiązania z kwerendą w accessie
Mam taki problem i postaram się go w miarę opisać ;)
Jest tabela projekty
W niej mam m.in. idProjektu, Data, IlośćKompletów, Typ1, Typ2, Typ3 ....
W typach występują nazwy np: aaa, bbb, aaa, w ilości kompletów podana jest liczba np 2

Potrzebuję raport wydanych "typów" z tego roku.
Zrobiłem sobie kwerendę, która pobiera datę z formularza raportowego.
Niech to będzie dzień: 01-01-2018.
Kwerenda zlicza mi ile było w danym okresie wydanych Typ1, Typ2 itd.
Z kwerendy wychodzi 15 szt aaa, 2 szt bbb...
Tyle że w tabeli są dodatkowo "ilośćkompletów". co powinno wymnożyć dany projekt.
I tutaj mam właśnie problem, nie wiem jak to zrobić :/

Pozdrawiam
Darek
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: kwerenda "wyliczająca"

Czy w każdym rekordzie IlośćKompletów może być różna dla danego typu? Jak wygląda kod SQL dla tej kwerendy wyliczającej?
Dariusz Szyndler

Dariusz Szyndler Właściciel, Jump.Net

Temat: kwerenda "wyliczająca"

Komplety dotyczą każdego typu.
Czyli jeżeli w projekcie występuje:
komplety 3 a typy: aaa, bbb, aaa
To powinno mi dać wynik 6 x aaa oraz 3 x bbb
Obecnie mam kwerendę zliczającą, a dokładnie 6 kwerend zliczających Typ1, Typ2 ... Typ6
Tyle typów może maksymalnie być w jednym projekcie.

SQL kwerendy wygląda tak:
SELECT tb_Projects.Door1 AS Door, tb_Projects.[Date Creation] AS [Date]
FROM tb_Projects
WHERE (((tb_Projects.Door1)<>"none") AND ((tb_Projects.[Date Creation])>=[Forms]![START]![BeginDate] And (tb_Projects.[Date Creation])<=[Forms]![START]![EndDate]))
ORDER BY tb_Projects.[Date Creation] DESC;

Dla Typ2:
SELECT tb_Projects.Door2 AS Door, tb_Projects.[Date Creation] AS [Date]
FROM tb_Projects
WHERE (((tb_Projects.Door2)<>"none") AND ((tb_Projects.[Date Creation])>=[Forms]![START]![BeginDate] And (tb_Projects.[Date Creation])<=[Forms]![START]![EndDate]))
ORDER BY tb_Projects.[Date Creation] DESC;

Analogicznie dla pozostałych Typ3... Typ6
Następnie to łącze kwerendą scalającą, która wygląda tak:

SELECT qryReportSumD1.[Door], qryReportSumD1.[Date]
FROM qryReportSumD1
WHERE (((qryReportSumD1.[Door])<>"none"))
UNION ALL SELECT qryReportSumD2.[Door], qryReportSumD2.[Date]
FROM qryReportSumD2
WHERE (((qryReportSumD2.[Door])<>"none"))
UNION ALL SELECT qryReportSumD3.[Door], qryReportSumD3.[Date]
FROM qryReportSumD3
WHERE (((qryReportSumD3.[Door])<>"none"))
UNION ALL SELECT qryReportSumD4.[Door], qryReportSumD4.[Date]
FROM qryReportSumD4
WHERE (((qryReportSumD4.[Door])<>"none"))
UNION ALL SELECT qryReportSumD5.[Door], qryReportSumD5.[Date]
FROM qryReportSumD5
WHERE (((qryReportSumD5.[Door])<>"none"))
UNION ALL SELECT qryReportSumD6.[Door], qryReportSumD6.[Date]
FROM qryReportSumD6
WHERE (((qryReportSumD6.[Door])<>"none"));
Dariusz Szyndler

Dariusz Szyndler Właściciel, Jump.Net

Temat: kwerenda "wyliczająca"

Zrobiłem pewne modyfikacje.
Mianowicie zrobiłem pojedynczą kwerendę, SQL:
SELECT tb_Projects.Door1 AS DOOR, Sum(IIf(IsNull(tb_Projects.Set),1,tb_Projects.Set)) AS Suma
FROM tb_Projects
WHERE (((tb_Projects.[Date Creation])>#1/15/2018#) AND tb_Projects.Door1<>"None")
GROUP BY tb_Projects.Door1
ORDER BY tb_Projects.Door1 ASC
UNION ALL SELECT tb_Projects.Door2 AS DOOR, Sum(IIf(IsNull(tb_Projects.Set),1,tb_Projects.Set)) AS Suma
FROM tb_Projects
WHERE (((tb_Projects.[Date Creation])>#1/15/2018#) AND tb_Projects.Door2<>"None")
GROUP BY tb_Projects.Door2
UNION ALL SELECT tb_Projects.Door3 AS DOOR, Sum(IIf(IsNull(tb_Projects.Set),1,tb_Projects.Set)) AS Suma
FROM tb_Projects
WHERE (((tb_Projects.[Date Creation])>#1/15/2018#) AND tb_Projects.Door3<>"None")
GROUP BY tb_Projects.Door3
UNION ALL SELECT tb_Projects.Door4 AS DOOR, Sum(IIf(IsNull(tb_Projects.Set),1,tb_Projects.Set)) AS Suma
FROM tb_Projects
WHERE (((tb_Projects.[Date Creation])>#1/15/2018#) AND tb_Projects.Door4<>"None")
GROUP BY tb_Projects.Door4
UNION ALL SELECT tb_Projects.Door5 AS DOOR, Sum(IIf(IsNull(tb_Projects.Set),1,tb_Projects.Set)) AS Suma
FROM tb_Projects
WHERE (((tb_Projects.[Date Creation])>#1/15/2018#) AND tb_Projects.Door5<>"None")
GROUP BY tb_Projects.Door5
UNION ALL SELECT tb_Projects.Door6 AS DOOR, Sum(IIf(IsNull(tb_Projects.Set),1,tb_Projects.Set)) AS Suma
FROM tb_Projects
WHERE (((tb_Projects.[Date Creation])>#1/15/2018#) AND tb_Projects.Door6<>"None")
GROUP BY tb_Projects.Door6;

Sumuje to co chcę.
Jednak zamiast "pełnej" sumy, mam:
np:
aaa 2
bbb 1
aaa 1
ccc 1

chciałbym uzyskać wynik:
aaa 3
bbb 1
ccc 1


Może ktoś pomóc?
Szczerze mówiąc już mi mózg "paruje" ;)
Nie znam SQL wiec... kod uzyskałem, metodą prób i błędów :/
Dariusz Szyndler

Dariusz Szyndler Właściciel, Jump.Net

Temat: kwerenda "wyliczająca"

Znalazłem rozwiązanie :)
Dla potomnych:
Wystarczy dodać jeszcze jedną kwerendę, która z sumuje i posegreguje pierwszą :)
W moim przypadku jest to:
SELECT Kwerenda1.DOOR, Sum(Kwerenda1.Suma) AS SumaOfSuma
FROM Kwerenda1
GROUP BY Kwerenda1.DOOR
ORDER BY Sum(Kwerenda1.Suma) DESC;

Jak to powiedzenie mówi, najprostsze rozwiązania, są najlepsze :D

Następna dyskusja:

Kwerenda SQL przez VBA




Wyślij zaproszenie do