sagsTabel indeholder s_id, journalNr, udbudsdato, u_id
udbudsTabel.e_id_1, udbudsTabel.e_id_2, udbudsTabel.e_id_3, udbudsTabel.e_id_4 refererer altså til entreprenørTabel.e_id sagsTabel.u_id refererer til udbudsTabel.u_id
Jeg vil så gerne have følgende ud i en rapport: 1. Alle entreprenørnavne (entreprenørTabel.navn) 2. Oplysning om de har budt på en sag (kan ses ud fra om pris_1, pris_2, pris_3, pris_4 er større end nul og så er der jo et e_id_1, e_id_2, e_id_3, e_id_4 der refererer til e_id i entreprenørTabellen) 3. Oplysning om entreprenøren har vundet den sag de har budt på i form af et ja eller nej
SELECT entreprenørTabel.navn, udbudsTabel.vundet_1, udbudsTabel.pris_1, udbudsTabel_1.vundet_2, udbudsTabel_1.pris_2, udbudsTabel_2.vundet_3, udbudsTabel_2.pris_3, udbudsTabel_3.vundet_4, udbudsTabel_3.pris_4, udbudsTabel_4.vundet_5, udbudsTabel_4.pris_5, udbudsTabel_5.vundet_6, udbudsTabel_5.pris_6 FROM udbudsTabel AS udbudsTabel_5 RIGHT JOIN (udbudsTabel AS udbudsTabel_4 RIGHT JOIN (udbudsTabel AS udbudsTabel_3 RIGHT JOIN (udbudsTabel AS udbudsTabel_2 RIGHT JOIN (udbudsTabel AS udbudsTabel_1 RIGHT JOIN (entreprenørTabel LEFT JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_1) ON udbudsTabel_1.e_id_2 = entreprenørTabel.e_id) ON udbudsTabel_2.e_id_3 = entreprenørTabel.e_id) ON udbudsTabel_3.e_id_4 = entreprenørTabel.e_id) ON udbudsTabel_4.e_id_5 = entreprenørTabel.e_id) ON udbudsTabel_5.e_id_6 = entreprenørTabel.e_id;
og
SELECT udbudsTabel.u_id, entreprenørTabel.navn, udbudsTabel.vundet_1, udbudsTabel.pris_1, entreprenørTabel_1.navn, udbudsTabel.vundet_2, udbudsTabel.pris_2, entreprenørTabel_2.navn, udbudsTabel.vundet_3, udbudsTabel.pris_3, entreprenørTabel_3.navn, udbudsTabel.vundet_4, udbudsTabel.pris_4, entreprenørTabel_4.navn, udbudsTabel.vundet_5, udbudsTabel.pris_5, entreprenørTabel_5.navn, udbudsTabel.vundet_6, udbudsTabel.pris_6 FROM entreprenørTabel AS entreprenørTabel_5 INNER JOIN (entreprenørTabel AS entreprenørTabel_4 INNER JOIN (entreprenørTabel AS entreprenørTabel_3 INNER JOIN (entreprenørTabel AS entreprenørTabel_2 INNER JOIN (entreprenørTabel AS entreprenørTabel_1 INNER JOIN (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_1) ON entreprenørTabel_1.e_id = udbudsTabel.e_id_2) ON entreprenørTabel_2.e_id = udbudsTabel.e_id_3) ON entreprenørTabel_3.e_id = udbudsTabel.e_id_4) ON entreprenørTabel_4.e_id = udbudsTabel.e_id_5) ON entreprenørTabel_5.e_id = udbudsTabel.e_id_6 GROUP BY udbudsTabel.u_id, entreprenørTabel.navn, udbudsTabel.vundet_1, udbudsTabel.pris_1, entreprenørTabel_1.navn, udbudsTabel.vundet_2, udbudsTabel.pris_2, entreprenørTabel_2.navn, udbudsTabel.vundet_3, udbudsTabel.pris_3, entreprenørTabel_3.navn, udbudsTabel.vundet_4, udbudsTabel.pris_4, entreprenørTabel_4.navn, udbudsTabel.vundet_5, udbudsTabel.pris_5, entreprenørTabel_5.navn, udbudsTabel.vundet_6, udbudsTabel.pris_6;
Jeg vil umiddelbart sige at det er det første forslag vi skal videre med. Den oplyser om - alle entreprenører - hvem der har vundet dog uden journalnummer (og det vil jeg gerne have oplyst) - hvilke sager entreprenørerne har budt på i form af deres tilbudspris
Det jeg umiddelbart mangler er at jeg gerne vil have - journalnummeret oplyst jf ovenstående - kan man ikke gøre det så man lister entreprenøren og derunder de sager de har budt på. Se dette eksempel:
Entreprenørnavn Journalnr Budt Vundet CEG 1002-20-2 Ja Ja KF 1002-20-2 Ja Nej
Here is an idea Make a UNION query which contains four (4) sub SELECTS containing sagsTabel s_id, journalNr, udbudsdato, u_id with JOIN on udbudsTabel u_id, e_id_X, vundet_X (X = 1 to 4 for each SUB select) which JOINs to entreprenørTabel e_id, navn
when that is done you have a "normalized" table.
Now make a report where you group on s_id and sorts on s_id and vundet DESC so that the one which won comes first.
Morning! I'm busy all morning, but I'll try and read through all the comments to get up-to-date. Then I'll see if I can put something together for you. Thats if no other answers have been given.
The way I am looking at this is maybe not the same as kabbak, so I think we need to clear up what exactly you want to see on the report.
And maybe a look at your dB will help too. Can you send it to eksperten@NOSPAMsanthell.dk (remove NOSPAM)
I invisage something like this.
sagsTabel s_id journalNr udbudsdato 1 1234 10-06-2004 ------------------------------------------------------ e_id navn Pris Vundet 1 entreprenør1 400,000 Ja 2 entreprenør2 500,000 Nej 4 entreprenør4 550,000 Nej
sagsTabel s_id journalNr udbudsdato 2 12345 11-06-204 ------------------------------------------------------ e_id navn Pris Vundet 2 entreprenør2 100,000 Ja 4 entreprenør4 250,000 Nej 1 entreprenør1 300,000 Nej
But this is also possible
entreprenør e_id navn 1 entreprenør1 ------------------------------------------------------ s_id journalNr udbudsdato Pris Vundet 1 1234 10-06-2004 400,000 Ja 2 12345 11-06-2004 300,000 Nej
entreprenør e_id navn 2 entreprenør2 ------------------------------------------------------ s_id journalNr udbudsdato Pris Vundet 1 1234 10-06-2004 500,000 Nej 2 12345 11-06-2004 100,000 Ja
Here is an SQL you can use to select the information needed for th ereport. You can then make a report Grouping on entreprenør
SELECT tblAlias.navn, tblAlias.journalNr, tblAlias.udbudsdato, tblAlias.Pris, IIf([Vundet],"Ja","Nej") AS VundetJaNej FROM [SELECT sagsTabel.journalNr, sagsTabel.udbudsdato, sagsTabel.arbNavn, sagsTabel.adresse, entreprenørTabel.navn, entreprenørTabel.kommune, udbudsTabel.pris_1 AS Pris, udbudsTabel.vundet_1 AS Vundet FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_1) INNER JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id WHERE udbudsTabel.pris_1 >0 UNION SELECT sagsTabel.journalNr, sagsTabel.udbudsdato, sagsTabel.arbNavn, sagsTabel.adresse, entreprenørTabel.navn, entreprenørTabel.kommune, udbudsTabel.pris_2 AS Pris, udbudsTabel.vundet_2 AS Vundet FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_2) INNER JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id WHERE udbudsTabel.pris_2 >0 UNION SELECT sagsTabel.journalNr, sagsTabel.udbudsdato, sagsTabel.arbNavn, sagsTabel.adresse, entreprenørTabel.navn, entreprenørTabel.kommune, udbudsTabel.pris_3 AS Pris, udbudsTabel.vundet_3 AS Vundet FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_3) INNER JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id WHERE udbudsTabel.pris_3 >0 UNION SELECT sagsTabel.journalNr, sagsTabel.udbudsdato, sagsTabel.arbNavn, sagsTabel.adresse, entreprenørTabel.navn, entreprenørTabel.kommune, udbudsTabel.pris_4 AS Pris, udbudsTabel.vundet_4 AS Vundet FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_4) INNER JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id WHERE udbudsTabel.pris_4 >0 UNION SELECT sagsTabel.journalNr, sagsTabel.udbudsdato, sagsTabel.arbNavn, sagsTabel.adresse, entreprenørTabel.navn, entreprenørTabel.kommune, udbudsTabel.pris_5 AS Pris, udbudsTabel.vundet_5 AS Vundet FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_5) INNER JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id WHERE udbudsTabel.pris_5 >0 UNION SELECT sagsTabel.journalNr, sagsTabel.udbudsdato, sagsTabel.arbNavn, sagsTabel.adresse, entreprenørTabel.navn, entreprenørTabel.kommune, udbudsTabel.pris_6 AS Pris, udbudsTabel.vundet_6 AS Vundet FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_6) INNER JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id WHERE udbudsTabel.pris_6 >0]. AS tblAlias ORDER BY tblAlias.navn, IIf([Vundet],"Ja","Nej");
Denne giver mig følgende oplysninger: entreprenør e_id navn 1 entreprenør1 ------------------------------------------------------ s_id journalNr udbudsdato Pris Vundet 1 1234 10-06-2004 400,000 Ja 2 12345 11-06-2004 300,000 Nej
entreprenør e_id navn 2 entreprenør2 ------------------------------------------------------ s_id journalNr udbudsdato Pris Vundet 1 1234 10-06-2004 500,000 Nej 2 12345 11-06-2004 100,000 Ja
Men den viser kun de entreprenører der har budt. Jeg ville gerne have den til at vise alle entreprenører. Altså både dem der har budt og også dem der ikke har budt. Dem der ikke har budt skal bare nævnes. Altså således:
entreprenør e_id navn 1 entreprenør1 ------------------------------------------------------ s_id journalNr udbudsdato Pris Vundet 1 1234 10-06-2004 400,000 Ja 2 12345 11-06-2004 300,000 Nej
entreprenør e_id navn 2 entreprenør2 ------------------------------------------------------ s_id journalNr udbudsdato Pris Vundet 1 1234 10-06-2004 500,000 Nej 2 12345 11-06-2004 100,000 Ja
entreprenør e_id navn 3 entreprenør3 ------------------------------------------------------ s_id journalNr udbudsdato Pris Vundet
entreprenør e_id navn 4 entreprenør4 ------------------------------------------------------ s_id journalNr udbudsdato Pris Vundet 1 1234 10-06-2004 500,000 Nej 2 12345 11-06-2004 100,000 Nej
Undskyld hvis dette ikke var klart i starten, men det troede jeg.
Du siger samtidig: "You can then make a report Grouping on entreprenør". Vil det sige at jeg i rapport-delen skal lave en funktion der gør at den lister entreprenørnavnet én gang og derunder listes de sager entreprenøren har budt på?
I øvrigt synes jeg det er en vildt imponerende SELECT-UNION du har udarbejdet.
I had an idea that you also wanted to see those with NO offers, but didnt want to do any work which may not have been necessary (I'm lazy) :o)
Anyway, here's a solution which I think works OK!
SELECT tblAlias.navn, tblAlias.journalNr, tblAlias.udbudsdato, tblAlias.Pris, IIf([Vundet],"Ja","Nej") AS VundetJaNej FROM [SELECT sagsTabel.journalNr, sagsTabel.udbudsdato, sagsTabel.arbNavn, sagsTabel.adresse, entreprenørTabel.navn, entreprenørTabel.kommune, udbudsTabel.pris_1 AS Pris, udbudsTabel.vundet_1 AS Vundet FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_1) INNER JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id WHERE udbudsTabel.pris_1 >0 UNION SELECT sagsTabel.journalNr, sagsTabel.udbudsdato, sagsTabel.arbNavn, sagsTabel.adresse, entreprenørTabel.navn, entreprenørTabel.kommune, udbudsTabel.pris_2 AS Pris, udbudsTabel.vundet_2 AS Vundet FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_2) INNER JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id WHERE udbudsTabel.pris_2 >0 UNION SELECT sagsTabel.journalNr, sagsTabel.udbudsdato, sagsTabel.arbNavn, sagsTabel.adresse, entreprenørTabel.navn, entreprenørTabel.kommune, udbudsTabel.pris_3 AS Pris, udbudsTabel.vundet_3 AS Vundet FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_3) INNER JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id WHERE udbudsTabel.pris_3 >0 UNION SELECT sagsTabel.journalNr, sagsTabel.udbudsdato, sagsTabel.arbNavn, sagsTabel.adresse, entreprenørTabel.navn, entreprenørTabel.kommune, udbudsTabel.pris_4 AS Pris, udbudsTabel.vundet_4 AS Vundet FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_4) INNER JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id WHERE udbudsTabel.pris_4 >0 UNION SELECT sagsTabel.journalNr, sagsTabel.udbudsdato, sagsTabel.arbNavn, sagsTabel.adresse, entreprenørTabel.navn, entreprenørTabel.kommune, udbudsTabel.pris_5 AS Pris, udbudsTabel.vundet_5 AS Vundet FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_5) INNER JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id WHERE udbudsTabel.pris_5 >0 UNION SELECT sagsTabel.journalNr, sagsTabel.udbudsdato, sagsTabel.arbNavn, sagsTabel.adresse, entreprenørTabel.navn, entreprenørTabel.kommune, udbudsTabel.pris_6 AS Pris, udbudsTabel.vundet_6 AS Vundet FROM (entreprenørTabel INNER JOIN udbudsTabel ON entreprenørTabel.e_id = udbudsTabel.e_id_6) INNER JOIN sagsTabel ON udbudsTabel.u_id = sagsTabel.u_id WHERE udbudsTabel.pris_6 >0 UNION SELECT Null AS journalNr, Null AS udBudsdato, Null AS arbNavn, Null AS adresse, entreprenørTabel.navn, Null AS kommune, Null AS Pris, Null AS Vundet FROM (((((entreprenørTabel LEFT JOIN udbudsTabel AS T2 ON entreprenørTabel.e_id = T2.e_id_2) LEFT JOIN udbudsTabel AS T3 ON entreprenørTabel.e_id = T3.e_id_3) LEFT JOIN udbudsTabel AS T6 ON entreprenørTabel.e_id = T6.e_id_4) LEFT JOIN udbudsTabel AS T4 ON entreprenørTabel.e_id = T4.e_id_5) LEFT JOIN udbudsTabel AS T5 ON entreprenørTabel.e_id = T5.e_id_6) LEFT JOIN udbudsTabel AS T1 ON entreprenørTabel.e_id = T1.e_id_1 WHERE (((T1.e_id_1) Is Null) AND ((T2.e_id_2) Is Null) AND ((T3.e_id_3) Is Null) AND ((T6.e_id_4) Is Null) AND ((T4.e_id_5) Is Null) AND ((T5.e_id_6) Is Null)); ]. AS tblAlias ORDER BY tblAlias.navn, IIf([Vundet],"Ja","Nej");
When you make a report (using th ereport wizard) you can choose one or more fields which you want to group on. So if you choose the "entreprenør" fields the report will give you what you want. You can try it and see.
You ask "Hvad gør tblAlias.navn?" If you look at the end of the UNION select you will see "AS tblAlias". tblAlias is just a TEMP table (in memory) which is created when I make a SELECT from the result of another SELECT (The SELECT-UNION)
Anyway I hope this is what you want now. I'll take a look during the weekend to see if you need further help.
Mvh Terry (SELECT tblAlias.navn, .... FROM [SELECT....
Det her er helt kanon. Det havde jeg ALDRIG selv fundet ud af. 1000 tak for hjælpen, både til kabbak og Terry. Jeg vil gerne give kabbak nogle af pointene også, så: kabbak ligger du ikke lige et svar
Happy to see its working as you wanted. Just a little comment. It may be an idea to change your udbudsTale. At the moment it has a one-to-one relationship with sagsTabel. In fact it should be a many-to-many table with a relationship to sagsTable and entreprenørTable.
Bare lige for at være sikker på hvad du mener. 1. Jeg skal ændre relationen mellem udbudsTabel og sagsTabel fra 1:1 til *:* 2. Jeg skal ændre relationen mellem udbudsTabel og entreprenørTabel fra 1:1 til *:* 3. Jeg skal slette u_id i udbudsTabel og lave s_id og e_id som kombineret primærnøgle.
1+2: Yes. But a many to many relationship is only possible by having three tables, which you have already. The middle (link) table make a many-to-many possible.
3:Yes. Then th eprimary key will also make sure that an entreprenør can only give one bud for a sag.
OK kabbak, de er fortjent, men også tak for hjælpen til dig. Terry, jeg nåede ikke lige maskinen i går, men forsøger det i dag, men du får i hvert tilfælde dine point for det andet. Tak for hjælpen
Thanks to you both :o) kabbak>If you want an explanation to how the SQL is put together then let me know and I'll try and explain. mvh Terry
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.