Hej jag har två tabeller enligt nedan... Kan du beskriva din datastruktur? Är inte säker på exakt vad du menar men det kommer iaf bli en left eller right outer join. Det finns en relation mellan MID och MIDKoppling det är den enda kopplingen som finns.. Jag har lite svårt att få ihop dina exempeldata med den relationen. Är det tänkt att exakt det innehållet ska ge det utdatat? Du hämtar väl enbart information från "Tabell2"? Grejen är så här: Egentligen kan man kortfattat säga att: Alla IDTyp som finns skall finnas representerade till alla MIDKoppling oavsett om det finns en koppling eller ej. SELECT b.MID, a.MID AS IDTyp, c.Kvantitet Du beskriver på fel sätt; vad betyder alla dessa ID? Får det ej att fungera, värt att notera är att frågan skall hämta Du måste förklara tydligare. Det är omöjligt att förstå vad du menar. Ta lite data, visa vilket resultat du ska få, och exakt vilket resultat du får med givna data. Sen kan vi säga hur du ska göra. Vi gör ett nytt försök: SELECT A.ModellTyp, B.Produkt, B.Kvantitet FROM Tabell1 A LEFT JOIN Tabell2 B ON A.ModellTyp = B.RefModelltyp WHERE A.modell = 1 Okej, då har du ju egentligen en annan typ av struktur, du har ytterligare en tabell Produkt. Jag får tyvärr inte ut det avsedda resultatet. Så din enda koppling mellan produkter och modell är via "Tabell 2"? Precis som Nickas skriver så saknar jag en produkttabell... Den här frågan funkar i Access: Tusen, tusen tack!!! Som sagt: den är inte testad öht. Börja med den första för att se om du kan få fram alla relevanta produkter först. Sen kan det vara någon join som går år fel håll, eller parenteser som ska stå i en annan ordning eller dylikt. När jag kör frågorna: Kommer inte ihåg exakt hur man döper en subselect, det är nog det som är problemet. Hej, får sqlsatsen inte att fungera i SQL server, kan inte komma på vad det kan bero på. Vet inte riktigt hur van programmerare du är, men det här känns ju som en ganska enkel debugging.Avancerad SQL-sats..
-------------------------
Tabell1
ID | MID
1 | 1
1 | 2
1 | 3
-------------------------
Tabell2
MIDKoppling | IDTyp | Kvantitet
1 | 1 | 4
1 | 2 | 6
2 | 1 | 4
3 | 3 | 5
4 | 1 | 3
4 | 2 | 10
--------------------------
Jag vill nu skapa SQL-satser som skriver ut följande:
MID | IDTyp | Kvantitet
1 | 1 | 4
1 | 2 | 6
1 | 3 | Null
2 | 1 | 4
2 | 2 | Null
2 | 3 | Null
3 | 1 | Null
3 | 2 | Null
3 | 3 | 5
Hur åstadkommer jag detta i sammanhängande SQL-satser? Jag använder SQL Server 2000Sv: Avancerad SQL-sats..
Vilka fält är primärnycklar, vilka fält är främmande nycklar, osv...Sv: Avancerad SQL-sats..
Sv:Avancerad SQL-sats..
Sv: Avancerad SQL-sats..
/JohanSv:Avancerad SQL-sats..
Crystal Report är ett rapportgenereringsprogram som hanterar olika subrapporter, dvs. länkade rapporter mellan varandra.
Jag vill i min rapport länka huvudrapporten med en subrapport. Nackdelen är att kopplingen endast visar de poster som är matchade mot varandra och utesluter andra värden som inte finns.( finns inte ex. MID 2 och IDTyp 3, så visas inte denna information men det vill jag)
Jag vill alltså att de värden som inte finns representerade skall visas som Null i subrapporten. För att det skall bli möjligt måste jag koppla upp mig mot en fråga som visar angiven utdata.Sv: Avancerad SQL-sats..
Finns det koppling mellan MIDKoppling och IDTyp skrivs kvantitet ut annars skrivs NULL eller 0 ut.
Vidare så finns en parameter inställt på att ID i tabell1 är lika med 1 och att alla MID därefter skall matchas mot MIDKopplingar i tabell2Sv: Avancerad SQL-sats..
FROM Tabell1 a RIGHT OUTER JOIN
Tabell1 b ON a.ID = b.ID LEFT OUTER JOIN
Tabell2 c ON c.IDTyp = a.MID AND c.MIDKoppling = b.MID
Är det det du vill åstadkomma? :)
Ett tips är att börja använda primärnycklar och skapa referenstabeller istället. Slå ihop tabeller där det inte finns några unika nycklar är att gravt måla in sig i hörn, och blygs inte för att använda bättre namn på dina kolumner så att folk på forumet kan förstå.Sv:Avancerad SQL-sats..
Vad är det för något?Sv:Avancerad SQL-sats..
MID från tabell1.MID
IDTyp från tabell2.IDTyp
Kvantitet från tabell2.KvantitetSv: Avancerad SQL-sats..
Sv:Avancerad SQL-sats..
Tabell1
Modell | ModellTyp
1 | 1
1 | 2
1 | 3
2 | 4
2 | 6
1 | 7
Tabell2
RefModellTyp | Produkt | Kvantitet
1 | 101 | 12
1 | 102 | 24
2 | 102 | 21
2 | 103 | 44
3 | 102 | 87
3 | 103 | 35
4 | 101 | 12
4 | 103 | 13
6 | 112 | 21
7 | 103 | 22
7 | 112 | 63
Villkor:
Tabell1.Modell = 1
Tabell1.ModellTyp är kopplat till Tabell2.RefModellTyp
Jag vill skriva en fråga som ger följande utslag:
ModellTyp | Produkt | Kvantitet
1 | 101 | 12
1 | 102 | 24
1 | 103 | 0
1 | 112 | 0
2 | 101 | 0
2 | 102 | 21
2 | 103 | 44
2 | 112 | 0
3 | 101 | 0
3 | 102 | 87
3 | 103 | 35
3 | 112 | 0
7 | 101 | 0
7 | 102 | 0
7 | 103 | 22
7 | 112 | 63
Tack på förhand, jag har kört fast..Sv: Avancerad SQL-sats..
Kanske?Sv: Avancerad SQL-sats..
Något i stil med:
SELECT A.ModellTyp, B.Produkt, B.Kvantitet FROM Tabell1 A LEFT JOIN (Produkt P LEFT JOIN Tabell2 B ON P.id = B.produkt) ON A.ModellTyp = B.RefModelltyp WHERE A.modell = 1Sv:Avancerad SQL-sats..
Jag vill alltså att för varje ModellTyp skall Samtliga Produkter som är kopplade till Modell = 1 visas, oavsettt om de har något värde eller inte..Sv: Avancerad SQL-sats..
Ja, då får du väl göra något i stil med:
SELECT UNIQUE Produkt FROM Tabell2 LEFT JOIN Tabell1 ON tabell2.refmodelltyp = tabell1.modelltyp
För att få fram produkterna, och sen något i stil med:
SELECT Produkt, kvantitet from (Tabell2 LEFT JOIN Tabell1 on Tabell2.refmodelltyp = tabell1.modelltyp) A RIGHT JOIN (SELECT UNIQUE Produkt FROM Tabell2 LEFT JOIN Tabell1 ON tabell2.refmodelltyp = tabell1.modelltyp) B ON A.produkt = B.produkt
Eftersom det är skrivet på frihand så är det nog något fel, men jag hoppas principen framgår.Sv:Avancerad SQL-sats..
SELECT modtp, prodnr, Kvantitet FROM (SELECT Modell, ModellTyp AS modtp, prodnr FROM Tabell1, (SELECT DISTINCT Produkt AS prodnr FROM Tabell2)) AS allprod LEFT JOIN Tabell2 ON (allprod.prodnr = Tabell2.Produkt) AND (allprod.modtp = Tabell2.RefModellTyp) WHERE Modell = 1 ORDER BY modtp;Sv:Avancerad SQL-sats..
Nu återstår dock endast en sak att transformera SQL-satsen så den är kompatibel mot SQL Server 2000 med den som fungerar mot Access databasen (Åsas).
Jag vet inte vad det är men jag får inte Nicklas SQL-sats att fungera.. den ger mig heller inga konkreta felmeddelanden..Sv: Avancerad SQL-sats..
Sv:Avancerad SQL-sats..
SELECT Produkt, kvantitet from (Tabell2 LEFT JOIN Tabell1 on Tabell2.refmodelltyp = tabell1.modelltyp)
Fungerar!
SELECT DISTINCT Produkt FROM Tabell2 LEFT JOIN Tabell1 ON tabell2.refmodelltyp = tabell1.modelltyp
Fungerar!
Men ej ihop för då får jag följande fel:
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'A'.
Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near 'B'.Sv: Avancerad SQL-sats..
Sv: Avancerad SQL-sats..
Egentligen så är det viktigaste att den fungerar i Oracle men det har jag inte testat än.. provar på SQL server först..Sv:Avancerad SQL-sats..
Skapa först delsatsen, se till att den definitivt fungerar. Skapa sen den yttre satsen och se till att den funkar med lite manuellt inskrivna värden. Och slå sen ihop dem.