Matrix opbouwen uit meerdere regels en kolomen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jonathan van den Berg

Jonathan van den Berg

05/11/2012 16:25:24
Quote Anchor link
Ik probeer vanuit SQL een kortingsmatrix te bouwen.
Alleen ik loop tegen een beperking van mijn kennis aan en kan via google niet een oplossing voor mijn probleem vinden.

Ik ben begonnen met de volgende sql query:
Quote:
SELECT
SC450700.[SC45002] AS [StocCommGrp],
SC450700.[SC45003] AS [Klant],
SC450700.[SC45004] AS [Dicount0],
SC450700.[SC45005] AS [Dicount1],
SC450700.[SC45006] AS [Dicount2],
SC450700.[SC45007] AS [Dicount3],
SC450700.[SC45008] AS [Dicount4],
SC450700.[SC45009] AS [Dicount5],
SC450700.[SC45010] AS [Dicount6],
SC450700.[SC45011] AS [Dicount7],
SC450700.[SC45012] AS [Dicount8],
SC450700.[SC45013] AS [Dicount9]
FROM SC450700


Dan krijg ik als output:

10 KLANT 1 Dicount0 Dicount1 etc
10 KLANT 2 Dicount0 Dicount1 etc
20 KLANT 1 Dicount0 Dicount1 etc
20 KLANT 2 Dicount0 Dicount1 etc
etc

Nu wil ik:
.................DISCOUNT 10......DISCOUNT 11.....(....)..DISCOUNT 20........(etc)
KLANT 1....10 / Dicount0.......10 / Dicount1.......(....)...20 / Discount0....(etc)

(ik heb punten gebruikt om te zorgen dat de tabel een beetje duidelijk overkomt)

Nu heb ik dit een beetje gelukt door het volgende te doen:

Quote:
CASE WHEN SC450700.[SC45002] = 10 THEN SC450700.[SC45004] END as [DISC CODE 10],
CASE WHEN SC450700.[SC45002] = 10 THEN SC450700.[SC45005] END as [DISC CODE 11],
(....)
CASE WHEN SC450700.[SC45002] = 20 THEN SC450700.[SC45004] END as [DISC CODE 20],
CASE WHEN SC450700.[SC45002] = 20 THEN SC450700.[SC45005] END as [DISC CODE 21],
CASE WHEN SC450700.[SC45002] = 20 THEN SC450700.[SC45006] END as [DISC CODE 22],


Nu krijg ik een mooie rij 10 - 19 en dan 20 - 29 maar die krijg ik niet achter elkaar. (ben dus halverwege de oplossing)

Nu zijn het 99 codes en ca. 80 klantgroepen.

De vraag is:
- hoe krijg ik een mooie matrix uit de SQL database?
- hoe kan ik dit voor elkaar krijgen zonder tientallen regels met CASE WHEN te maken.
Gewijzigd op 05/11/2012 16:30:39 door Jonathan van den Berg
 
PHP hulp

PHP hulp

06/12/2024 02:06:18
 
John D

John D

05/11/2012 16:35:00
Quote Anchor link
Het lijkt erop dat je datamodel niet in order is, als je een kalnt hebt met 99 velden discount is het wellicht zinvol om dit te normaliseren?
 
Jonathan van den Berg

Jonathan van den Berg

05/11/2012 16:45:37
Quote Anchor link
Bedankt John,

Dat normaliseren is al gedaan, niet alle van de 99 velden worden gebruikt.

Nu wil ik er een kortingsmatrix van maken, zodat iedereen in de matrix kan zien welke korting geldt. (er staan in elk tiental enkele actieve groepen)
Zelf vind ik het aantal kortingsgroepen van 99 niet zo heel veel, het gaat namelijk om een zeer grote aantal verschillende producten.
 
Kris Peeters

Kris Peeters

05/11/2012 18:04:23
Quote Anchor link
Wanneer je in je database velden maakt zoals
telefoon1, telefoon2, telefoon3
... dan ben je slecht bezig. Dat is niet de bedoeling. Dan moet je normaliseren.

Je zegt dat je daar al aan gewerkt hebt, maar voor mij ruikt het nog steeds naar een niet-genormaliseerde constructie.

Wat jij nodig hebt:
Een tabel 'klanten'; een tabel 'kortingen'
En dan moet je de tabel kortingen maken, zodat ze kunnen gelden voor alle groepen kortingen.
In die tabel kortingen heb je een veld klant_id; en verder alles wat je daar nodig hebt.
Zo is er een link tussen de korting en de klant, maar heb je geen 100 velden nodig.
Dat is normaliseren.

Lees nog eens deftig een tutorial over normaliseren; kwestie dat je het concept goed begrijpt.

Jonathan van den Berg op 05/11/2012 16:45:37:
... Dat normaliseren is al gedaan, niet alle van de 99 velden worden gebruikt. ...

... het gaat namelijk om een zeer grote aantal verschillende producten. ...

Want deze argumenten doen echt absoluut niets ter zake. Daar gaat het niet om.


en o ja ... dan kan je in je database namen gebruiken die leesbaar zijn; in plaats van die gecodeerde tabel- en veldnamen.
Gewijzigd op 05/11/2012 18:06:52 door Kris Peeters
 
Jonathan van den Berg

Jonathan van den Berg

06/11/2012 12:58:02
Quote Anchor link
Bedankt Kris,

Ik begrijp nu wat er bedoeld wordt met normalisatie.
Alleen de database kan ik zelf niks aan veranderen, het is een onderliggende database van een programma.

Ik had al me bedenkingen bij de manier van opbouw, maar daar kan ik niks aan veranderen.

Wat zijn de mogelijkheden behalve wat ik bovenstaande heb aangegeven.

Als ik daarmee door ga dan krijg ik de volgende tabel:

10 - Klant 1 - kg 10 - kg 11 - kg 12 - (..) kg 19
20 - Klant 1 - NULL - NULL - NULL - NULL - (....) - kg 20 - kg 21 - etc
 
Jonathan van den Berg

Jonathan van den Berg

14/11/2012 17:21:26
Quote Anchor link
Nog iemand die een idee heeft hoe ik dit voor elkaar krijg?
Ik kan dus niet iets aanpassen aan de database.
Mijn uitdaging is om de data uit de database te halen en het op een inzichtelijke manier te presenteren.
Ik wil eigenlijk gewoon een tabel maken met horizontaal de kortingsgroepen en verticaal de klantgroepen.
Eigenlijk is daar weinig geks aan behalve dat de database waaruit de gegevens komt nogal ingewikkeld is opgebouwd.
 
Erwin van Hoof

Erwin van Hoof

14/11/2012 23:48:13
Quote Anchor link
Beste Jonathan,

Hoe is je db structuur. Misschien brengt dit meer duidelijkheid voor ons om je te helpen met een oplossing.

Groet,

Erwin van Hoof
SiteOn
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.