Oprettet man. d. 08. februar 2010 kl. 22:26:02

tigerdyr2007
tigerdyr2007 (7.840 point. Point ude: 0)

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...

Skrevet man. d. 08. februar 2010 kl. 22:40:02| #1

mugs
mugs (162.272 point)
Prøv om du kan få hjælp på Thomas Jepsen's udmærkede hjemmeside:

makeITeasy.dk

Under downloads ligger (bl.a. fremragende funktioner) et eksempel på "Dynamisk rapport...".

Jeg har ikke selv erfaringer med den.

Skrevet man. d. 08. februar 2010 kl. 23:33:03| #2

fdata
fdata (46.719 point)
Du kan klare det via en lille to-trins raket.

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;

Skrevet tir. d. 09. februar 2010 kl. 09:13:18| #3

tigerdyr2007
tigerdyr2007 (7.840 point)
Jeg vil prøve begge metoder senere, der er lige landet en bunke arbejde på bordet, så bliver nok først i morgen - dårlig timing :(

Skrevet lør. d. 13. februar 2010 kl. 20:11:03| #4

tigerdyr2007
tigerdyr2007 (7.840 point)
Hey fdata, og alle jer andre

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?

Skrevet tir. d. 16. februar 2010 kl. 21:44:49| #5

fdata
fdata (46.719 point)
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)

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Bilags nr?

Oprettet den 3. februar 2012 kl. 21.19
chino2990 giver 30 point for svar | Giv et svar »

Forbindelse til oracle

Oprettet den 3. februar 2012 kl. 16.48
larsgrau giver 100 point for svar | Giv et svar »

SQL - definer kolonner.

Oprettet den 3. februar 2012 kl. 09.49
stof giver 30 point for svar | Giv et svar »

Seneste guides

Den gode bruger
Adgang til NAS-server via WAN
Kollektion af Batch tutorials (FJERNET)
Tilpas din YouTube afspiller


   




Tips & Tricks fra PC World

Teaser billede

Sådan fjerner du pladskrævende metadata fra dine fotos

Det er langt fra altid, at dine billeders metadata såsom kameramodel og geografisk placering er vigtige at bevare. JPG & PNG Stripper kan luge ud i billedfilerne, så de fylder meget mindre....


Anmeldelser fra PC World

Teaser billede

Test: Superlet bærbar med mange muligheder

Toshiba har med Satellite Z830 skabt en af verdens letteste ultrabooks. Den vejer 1,1 kilo, og computeren på 13 tommer ser på papiret ud til at være en oplagt rejsekammerat. Men den lave vægt har...


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Samsung Galaxy S III på vej

Samsungs bedst sælgende smartphone nogensinde får en efterfølger om kort tid.


Nyheder fra Computerworld

Teaser billede

Apple retter hele 51 sikkerhedshuller i Mac OS X

Apple lukker hele 51 sårbarheder i Mac OS X, hvoraf de fleste er kritiske. Se her, hvor hullerne er.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger