Queryresultaat geeft teveel regels als resultaat

Status
Niet open voor verdere reacties.

IsR

Gebruiker
Lid geworden
2 jul 2015
Berichten
94
Goedendag,
Het volgende:
Ik heb een formulier waarmee ik wijzigingen in kostprijs van producten vastleg (het is een dummy, maar om de problematiek maar even aan te geven).
Ga er even van uit dat ik de gegevens handmatig in de tabel zet (zonder comboboxen, links naar andere tabellen e.d., dat maakt voor de vraag niet uit...geloof ik).
Voor het voorbeeld neem ik maar 1 product, product A.

Bijvoorbeeld:
Product A in maand 1 wijzigt niet = de originele kostprijs blijft gehandhaafd, eur 1,50. (wijzigingsdatum 15-1)
Product A in maand 2 wijzigt: nieuwe kostprijs komt in de tabel, eur 1,94. (wijzigingsdatum 10-2)
Maand 3 wijzigt opnieuw de kostprijs, wijziging in de tabel eur 5,97. (wijzigingsdatum 20-3)
Maand 4, kostprijs wordt eur 3,61. (wijzigingsdatum 5-4)
Maand 5, kostprijs wijzigt niet, er komt dus geen registratie in de tabel, blijft dus eur 3,61.

De maand van wijziging wordt vastgelegd in de tabel als [MAANDWIJZIGING]

Nu wil ik via query (via het std. queryontwerp, niet persé via VBA) het verloop per maand laten zien, maar ik krijg teveel regels (enerzijds logisch, er zijn immers meerdere wijzigingsdata), maar ik wil maar één regel per product. Dat lukt dus niet.

Ter illustratie even een 2-tal plaatjes, wat mijn uitkomst is en hoe het moet worden.

[Resultaat.JPG
(zo ziet mijn queryresultaat er dus nu uit, voor product A.)

ResultaatTOBE.JPG
(zo zou ik het willen hebben)
de veldnamen zijn expressies:
Code:
MND1:IIF([MAANDWIJZIGING]=1;[KOSTPRIJSNW];0)
MND2:IIF([MAANDWIJZIGING]=2;[KOSTPRIJSNW];0)
etc.

Als er geen wijzigingsrecord in mijn wijzigingentabel staat, moet de volgende maand, de kostprijs van de vorige maand laten zien. In het voorbeeld geldt dit voor maand 5. Hoe?

Hopelijk ben ik duidelijk genoeg. Wie o wie kan mij helpen?
Het is vast weer heel basaal, maar helaas kom ik (weer) niet uit.
 
Je geeft veel te weinig informatie, en aan de plaatjes en de code hebben we niet zoveel. Het verloop per maand moet je kunnen laten zien met een kruistabel. Je eerste plaatje lijkt daar een beetje op, maar mist de producten. Of is alles één product? Sowieso zou ik dus de SQL van de query moeten zien, niet alleen de IIF codes. Die je niet nodig zou moeten hebben :)
 
Met deze kruistabel krijg je in ieder geval al de wijzigingen in je query in één rij per product. Alleen voor de ongewijzigde maanden heb je dan niks, omdat je daar geen data voor hebt. Daarvoor heb je nog een extra query nodig met een cartesich product.
PHP:
TRANSFORM First(Wijzigingen.[kostprijsNW]) AS kostprijsNW
SELECT Wijzigingen.productnaam
FROM Wijzigingen
GROUP BY Wijzigingen.productnaam
PIVOT "MND" & Month([wijzigingsdatum]) In ("MND1","MND2","MND3","MND4","MND5","MND6","MND7","MND8","MND9","MND10","MND11","MND12");
 
In query2 zit een uitwerking m.b.v. een extra tabel. Die doet volgens mij wat jij wilt. Ik heb er een voorbeeldje van gemaakt, want het is anders niet uit te leggen :).
 

Bijlagen

  • DummyKostprijs.zip
    21,4 KB · Weergaven: 45
Hoi Octafish,
was net die vraag al aan het typen, maar zelfs daarmee was je met te snel af :thumb:.
Ik ga je voorbeeldje bekijken en in m'n live-database uitproberen.
Ik laat het resultaat nog weten.
Bedankt in ieder geval alvast weer voor de moeite en support.
 
Hoi Octafish,

Ik heb je oplossing bekeken en al snap ik wat je hebt gedaan, het is nog niet helemaal wat ik zoek.
Wat ik graag wil dat als er in maand 4 een wijziging is geweest en in maand 5 niet, dan moet maand 5 dezelfde nieuwe kostprijs tonen als waarin het in maand 4 gewijzigd is.
In het voorbeeld van de database betekent dit de kostprijs is in maand 4 gewijzigd in EUR 3,61. In maand 5 is er geen wijziging, maand 5 moet dan nog steeds EUR 3,61 tonen. Is dat ook nog te realiseren?
 
Jij zegt het, ik heb het ei nog niet mogen ontdekken :(. Mag ik je daar dan nog een tipje van de sluier over vragen, want daar ben ik nu inmiddels al weken voor aan het stoeien........ik zie het niet.
Octafish, graag nogmaals je hulp.
Bvd
 
Laatst bewerkt:
Iemand nog voor mij de "juist makkelijkere oplossing"?.
Tijd begint voor mij een beetje te dringen dus ik hoop dat iemand mij nog kan helpen.
Aangezien ik er zelf nog steeds niet uit ben, krijg anders een probleem met de oplevering....
Zou erg gewaardeerd worden als iemand me de makkelijke oplossing kan uitleggen.....:)
 
Nou, ik vrees dat er geen eenvoudige oplossing is; ik was een beetje voorbarig. Of ik overschat mijn eigen capaciteiten :). Eén van de redenen dat het nooit gaat werken, is omdat je weliswaar 12 maanden hebt, maar dat een db doorgaans langer meegaat dan één jaar. En met de data voor volgend jaar erbij, of überhaupt met meerdere jaren, is er geen zinvolle zoekactie te doen op basis van deze uitgangspunten. Ik zou het zelf vergeten, en het houden bij de oplossing die er nu is, de huidige kruistabel. In een query kun je dan de juiste prijs er nog wel bijzoeken. Maar ik zou dus nooit met MND1-MND12 werken, maar altijd met datums. Liefst 2: ingangsdatum en einddatum. Het kan met één datum, maar dat maakt de zoekquery lastiger. Met twee datums kun je de prijs opzoeken op basis van de transactiedatum.
 
Nou ja, het spreekt dan in mijn voordeel dat ik de oplossing nog niet heb kunnen vinden, als zelfs Octafish geen "panklare" oplossing heeft. Met de oplossing zover heb ik in ieder geval weer wat geleerd, als is het nog steeds niet wat ik (blijkbaar niet haalbaar :shocked:) zoek.
Overigens nog ter info, dat een DB meer dan 1 jaar bestaat, klopt, maar dat probleem wilde ik oplossen door aan het eind van het jaar de waardes als "fixed values" in een tabel wilde opslaan. zodat voor het nieuwe jaar er een "clean-query" gemaakt kan worden.
Als het met 2 datums wél kan, is het prima. Het hoeft niet simpel te zijn, áls ik de info maar uit de DB krijg (en ik dus helaas de weg niet weet).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan