Excuses, vergeten titel goed in te vullen! Moet zijn: [SQL Server 2000] Is er een goed Union All alternatief?
Hallo,
Ik zit met het volgende probleem: op mijn werk wordt gebruik gemaakt van 3 tabellen waar informatie over recepten in opgeslagen staat. In de eerste tabel, Recipe Headers staat de naam van het product dat met dit recept gemaakt kan worden maar ook een ID dat verwijst naar Recipe Management waar de grondstofcode's van dat recept staan. Verder is er dan nog een tabel Grondstoffen waar grondstofcode's aan een naam en een doseerplaats gekoppeld worden.
De Recipe Headers tabel ziet er zo uit:
De Recipe Management tabel ziet er zo uit:
De Gronstof tabel ziet er zo uit:
Mijn vraag is nu: hoe kan ik op een nette manier een query of stored procedure maken die de volgende vraag 'beantwoord': Ik wil van recept <variabel> alle grondstofnamen en doseerplaats weten. Iets wat dus ongeveer het volgende resultaat geeft:
Ik heb al het een ander geprobeerd maar het probleem, voor mij dan toch, ligt in het feit dat de Recipe Management tabel per rij 201 kolommen heeft. 1 ID kolom, 100 grondstof kolommen en 100 percentage kolommen. (Is indertijd zo opgezet...)
Als ik hier bijvoorbeeld UNION All met een left outer join gebruik zou ik dat 100 keer moeten herhalen...
Het kan werken maar ik ben er bijna zeker van dat er een andere oplossing voor moet zijn. (De left join is nodig omdat sommige kolommen in de Recipe Management tabel M0000 bevatten. Dit is geen grondstof die in de Grondstoffen tabel staat maar slechts 'opvulsel'. Toch moeten ook die records worden weergegeven...)
Kan iemand mij in de goeie richting wijzen?
Hallo,
Ik zit met het volgende probleem: op mijn werk wordt gebruik gemaakt van 3 tabellen waar informatie over recepten in opgeslagen staat. In de eerste tabel, Recipe Headers staat de naam van het product dat met dit recept gemaakt kan worden maar ook een ID dat verwijst naar Recipe Management waar de grondstofcode's van dat recept staan. Verder is er dan nog een tabel Grondstoffen waar grondstofcode's aan een naam en een doseerplaats gekoppeld worden.
De Recipe Headers tabel ziet er zo uit:
code:
1
2
3
4
5
| Kolomen / Voorbeeldwaarde ID / 1973 Recipe Code / 6760 Recipe Name / "lekkere koekjes" ... |
De Recipe Management tabel ziet er zo uit:
code:
1
2
3
4
5
6
7
8
9
10
| Kolomen / Voorbeeldwaarde ID /1973 Code 01 / M2100 Code 02 / M2104 ... Code 100 / M2001 Procent 01 / 12 Procent 02 /16 ... Procent 100 / 0.212 |
De Gronstof tabel ziet er zo uit:
code:
1
2
3
4
5
| Kolommen / Voorbeeldwaarde Code / M2100 Description / bloem Dosing Area / D1 ... |
Mijn vraag is nu: hoe kan ik op een nette manier een query of stored procedure maken die de volgende vraag 'beantwoord': Ik wil van recept <variabel> alle grondstofnamen en doseerplaats weten. Iets wat dus ongeveer het volgende resultaat geeft:
code:
1
2
3
4
5
| grondstof - omschrijving - doseerplaats M2100 - bloem - D1 M2104 - suiker - D1 L1901 - water - L1 ... |
Ik heb al het een ander geprobeerd maar het probleem, voor mij dan toch, ligt in het feit dat de Recipe Management tabel per rij 201 kolommen heeft. 1 ID kolom, 100 grondstof kolommen en 100 percentage kolommen. (Is indertijd zo opgezet...)
Als ik hier bijvoorbeeld UNION All met een left outer join gebruik zou ik dat 100 keer moeten herhalen...
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| SELECT [Recipe Management].[Coda 01] AS grondstof, [Recipe Management].[Procent 01] AS procent, Grondstof.Description AS omschrijving, Grondstof.[Dosing Area] AS doseerplaats FROM [Recipe Management] LEFT OUTER JOIN Grondstof ON [Recipe Management].[Coda 01] = Grondstof.Coda WHERE ([Recipe Management].ID = 2155) UNION ALL SELECT [Recipe Management_1].[Coda 02] AS grondstof, [Recipe Management_1].[Procent 02] AS procent, Grondstof_1.Description AS omschrijving, Grondstof_1.[Dosing Area] AS doseerplaats FROM [Recipe Management] AS [Recipe Management_1] LEFT OUTER JOIN Grondstof AS Grondstof_1 ON [Recipe Management_1].[Coda 02] = Grondstof_1.Coda WHERE ([Recipe Management_1].ID = 2155) (...) UNION ALL SELECT [Recipe Management_1].[Coda 100] AS grondstof, [Recipe Management_1].[Procent 100] AS procent, Grondstof_1.Description AS omschrijving, Grondstof_1.[Dosing Area] AS doseerplaats FROM [Recipe Management] AS [Recipe Management_1] LEFT OUTER JOIN Grondstof AS Grondstof_1 ON [Recipe Management_1].[Coda 100] = Grondstof_1.Coda WHERE ([Recipe Management_1].ID = 2155) |
Het kan werken maar ik ben er bijna zeker van dat er een andere oplossing voor moet zijn. (De left join is nodig omdat sommige kolommen in de Recipe Management tabel M0000 bevatten. Dit is geen grondstof die in de Grondstoffen tabel staat maar slechts 'opvulsel'. Toch moeten ook die records worden weergegeven...)
Kan iemand mij in de goeie richting wijzen?
[ Voor 1% gewijzigd door Mesjefskie op 18-01-2008 17:09 . Reden: Titel vergeten, excuus! ]