08. februar 2010 - 22:26Der er
4 kommentarer og 1 løsning
Krydstabulering ud fra mange til mange tabel
Hej eksperter.
Jeg har en lille ting som har ligget og ruget, og jeg har ikke selv kunnet finde en fornuftig løsning:
Følgende tabeller:
tbl_produkter: ID ProduktNavn ------------------------------------------------ tbl_service: ID ServiceNavn ProduktID (relateret til ID i produkter) ------------------------------------------------ tbl_person: ID PersonNavn ------------------------------------------------ tbl_service_signup: ID ServiceID (relateret til ID i service) PersonID (relateret til ID i person) aktiv (Yes/No) ------------------------------------------------
tbl_service_signup er en mange-til-mange tabel som holder styr på alle de perosner som er tilmeldt til (typisk mere end en service)
Jeg vil så gerne lave et udtræk som ser således ud: ServiceNavn1 ServiceNavn2 ServiceNavn3 PersonNavn1 Yes No PersonNavn2 No Yes PersonNavn3 Yes Yes Yes
Bemærk der mangler to felter. Det jeg vil have er altså: Et 'dataark' som indeholder alle udvalgte personers tilmelding til alle services som hører til et bestemt produkt. Er der ikke nogen tilmelding skal der være tomt (eller et X eller...) Er der en tilmelding (og Aktiv 'Yes') skal der stå 'Yes', og ligeledes med 'No'.
Håber jeg har fået det forklaret tydelige nok.
Forventer ikke en færdig kode, men gerne en SQL-sætning, eller et semifærdig VBA-script, en henvisning eller...
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
Først opretter du en forespørgsel, som opstiller det samlede datagrundlag (opret en ny forespørgsel uden tabeller, skift til SQL view og copy/paste nedenstående ind):
SELECT t_Person.PersonNavn, t_Service.ServiceNavn, t_Produkter.ProduktNavn, t_Service_Signup.Aktiv FROM (t_Service_Signup INNER JOIN t_Person ON t_Service_Signup.PersonID = t_Person.ID) INNER JOIN (t_Service INNER JOIN t_Produkter ON t_Service.ProduktID = t_Produkter.ID) ON t_Service_Signup.ServiceID = t_Service.ID;
Gem den som Q_Service_Signup
Opret så krydstabuleringen på samme måde:
TRANSFORM First(IIf([Aktiv],"Yes","No")) AS A SELECT Q_Service_Signup.PersonNavn FROM Q_Service_Signup GROUP BY Q_Service_Signup.PersonNavn PIVOT Q_Service_Signup.ServiceNavn;
Din metode fungerer perfekt. Mugs, det er lidt det samme TJ gør, men alligevel ikke, desuden tæller han op (en simpel tilretning), og jeg skal ikke nødvendigvis rapportere det som TJ gør, men ellers en smart ting han havde bygget.
Nogen ideer til hvordan man kan bruge en forespørgsel i en anden forespørgsel uden at oprette den først. Altså så den bliver kilde til forespørgsel2?
Bruge en forespørgsel uden at oprette den? Tjah. Rent teknisk er det jo nok muligt at "indlejre" den ene i den anden; men hvorfor dog? Det er da langt mere overskueligt og ikke mindst let at vedligeholde, hvis de ligger hver for sig.
Tak for point i øvrigt ;o)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.