Ik heb een lastige select proberen te maken, maar ik krijg het maar niet voor elkaar...
In woorden uitgelegd wil ik het volgende:
Ik wil een lijst met bestellingen en de artikels oproepen. Simpel dus? Ietsje moeilijker maken dan:
als een artikel 15x of meer voorkomt in 1 bestelling, mogen deze artikels niet voorkomen voor dit rapport.
Bijvoorbeeld:
Bestelling 1: 5x artikel X + 10x artikel Y
Bestelling 2: 10x artikel X + 15x artikel Z
Bestelling 3: 20x artikel Y + 50x artikel Z
Resultaat zou moeten zijn:
5 records artikel X uit bestelling 1
10 records artikel Y uit bestelling 1
10 records artikel X uit bestelling 2
rest moet geskipt worden
Verder dan het volgende kom ik niet:
ReferenceNbr = nummer van de bestelling
Zo krijg ik een lijstje van bestellingen met de artikelnamen die minder dan 15x voorkomen.
Maar ik heb ook nog wat andere velden nodig zoals ArticleType, OrderDate, DeliveryDate, DeliveryAddress, etc
Al die velden zitten in tabel Stock, dus geen probleem voor joins of zoiets...
Eerder had ik met een collega ook al het volgende gevonden, maar dit geeft als resultaat dat wanneer 1 bestelling 15 artikels of meer bevat, de volledige bestelling wordt geskipt. We telden hier dus het aantal ReferenceNbrs, en niet de artikels. Beetje ingekort:
Op heb ook wat sites waar wat meer complexe syntax te vinden is, bekeken, maar ik zie niet onmiddellijk iets bruikbaars.
Met WHERE ... IN ( ... ) heb ik het ook geprobeerd, maar de syntax laat niet toe om én ReferenceNbr én ArticleName te gebruiken. Ik heb het dan geprobeerd met 2 IN's te koppelen met een AND, maar dit geeft ook niet het goeie resultaat.
Een tip welke functie of syntax ik verder zou kunnen gebruiken, zou meer dan welkom zijn!
In woorden uitgelegd wil ik het volgende:
Ik wil een lijst met bestellingen en de artikels oproepen. Simpel dus? Ietsje moeilijker maken dan:
als een artikel 15x of meer voorkomt in 1 bestelling, mogen deze artikels niet voorkomen voor dit rapport.
Bijvoorbeeld:
Bestelling 1: 5x artikel X + 10x artikel Y
Bestelling 2: 10x artikel X + 15x artikel Z
Bestelling 3: 20x artikel Y + 50x artikel Z
Resultaat zou moeten zijn:
5 records artikel X uit bestelling 1
10 records artikel Y uit bestelling 1
10 records artikel X uit bestelling 2
rest moet geskipt worden
Verder dan het volgende kom ik niet:
code:
1
2
3
4
5
6
7
8
9
| SELECT ReferenceNbr, ArticleName
FROM (SELECT ReferenceNbr, ArticleName, COUNT(ArticleName) AS ArticleCount
FROM dbo.Stock
WHERE (ReferenceNbr LIKE '%45700%' OR ReferenceNbr LIKE '%45600%') AND
(OrderDate BETWEEN '01/11/2002' AND '31/10/2003') AND
(Company = 'BMB')
GROUP BY ReferenceNbr, ArticleName) DERIVEDTBL
WHERE (ArticleCount < 15)
ORDER BY ReferenceNbr, ArticleName |
ReferenceNbr = nummer van de bestelling
Zo krijg ik een lijstje van bestellingen met de artikelnamen die minder dan 15x voorkomen.
Maar ik heb ook nog wat andere velden nodig zoals ArticleType, OrderDate, DeliveryDate, DeliveryAddress, etc
Al die velden zitten in tabel Stock, dus geen probleem voor joins of zoiets...
Eerder had ik met een collega ook al het volgende gevonden, maar dit geeft als resultaat dat wanneer 1 bestelling 15 artikels of meer bevat, de volledige bestelling wordt geskipt. We telden hier dus het aantal ReferenceNbrs, en niet de artikels. Beetje ingekort:
code:
1
2
3
4
5
6
7
8
9
10
11
| SELECT ArticleName, ArticleType, ...
FROM (SELECT *
FROM Stock
WHERE (ReferenceNbr IN
(SELECT ReferenceNbr
FROM (SELECT ReferenceNbr, COUNT(ReferenceNbr) AS QTY
FROM Stock
GROUP BY ReferenceNbr, ArticleNbr) DERIVEDTBL
WHERE (QTY <= 15)))) DERIVEDTBL
WHERE ...
ORDER BY OrderDate, ReferenceNbr, ArticleName |
Op heb ook wat sites waar wat meer complexe syntax te vinden is, bekeken, maar ik zie niet onmiddellijk iets bruikbaars.
Met WHERE ... IN ( ... ) heb ik het ook geprobeerd, maar de syntax laat niet toe om én ReferenceNbr én ArticleName te gebruiken. Ik heb het dan geprobeerd met 2 IN's te koppelen met een AND, maar dit geeft ook niet het goeie resultaat.
Een tip welke functie of syntax ik verder zou kunnen gebruiken, zou meer dan welkom zijn!
[ Voor 3% gewijzigd door freeco op 14-11-2003 16:36 ]