mboost-dp1
Kombinere to SELECT sætningers output
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Hejsa :)
Jeg har 2 forskellige outputs, som jeg gerne vil kunne kombinere.
Output 1:
| Leverandør | ÅR | KG | STK |
| Navn |2005| 10 | 70941 |
Output 2:
| Leverandør | ÅR | Fejlnavn | Fejltypenr | Antal fejl |
| Navn |2005| Ridser | 1 | 544 |
Jeg ville så gerne kunne krydse de to outputs og få en tabel for jeg udregner 544/70941*100
Databasen ser således ud:
http://peecee.dk/uploads/052011/database_oversigt....
Output 1 sql :
Output 2 sql :
Jeg har 2 forskellige outputs, som jeg gerne vil kunne kombinere.
Output 1:
| Leverandør | ÅR | KG | STK |
| Navn |2005| 10 | 70941 |
Output 2:
| Leverandør | ÅR | Fejlnavn | Fejltypenr | Antal fejl |
| Navn |2005| Ridser | 1 | 544 |
Jeg ville så gerne kunne krydse de to outputs og få en tabel for jeg udregner 544/70941*100
Databasen ser således ud:
http://peecee.dk/uploads/052011/database_oversigt....
Output 1 sql :
SELECT Leverandør.Navn AS Leverandør, Format([produktion].[Dato],"yyyy") AS År, Round(Sum(AcrylPlader.Vægt*Produktion.PAntal),2) AS Kg, Sum(Produktion.PAntal) AS Stk
FROM ((Leverandør INNER JOIN AcrylPlader ON Leverandør.LevNr = AcrylPlader.LevNr) INNER JOIN Produkter ON AcrylPlader.PladeNr = Produkter.PladeNr) INNER JOIN Produktion ON Produkter.Vnr = Produktion.Vnr
WHERE (((Produktion.Dato) Between #1/1/2005# And #12/31/2009#))
GROUP BY Leverandør.Navn, Format([produktion].[Dato],"yyyy");
Output 2 sql :
SELECT Leverandør.Navn AS Leverandør, Format([Dato],"yyyy") AS År, FejlTyper.Fnavn AS Fejlnavn, FejlTyper.FtNr AS Fejltypenr, Sum(Fejl.AntalF) AS [Antal fejl]
FROM Leverandør INNER JOIN (((Fejl INNER JOIN FejlTyper ON Fejl.FtNr = FejlTyper.FtNr) INNER JOIN Produkter ON Fejl.Vnr = Produkter.Vnr) INNER JOIN AcrylPlader ON Produkter.PladeNr = AcrylPlader.PladeNr) ON Leverandør.LevNr = AcrylPlader.LevNr
GROUP BY Leverandør.Navn, Format([Dato],"yyyy"), FejlTyper.Fnavn, FejlTyper.FtNr
HAVING (((FejlTyper.FtNr)=1 Or (FejlTyper.FtNr)=2))
ORDER BY Format([Dato],"yyyy");
#2, den forstår jeg ikke den kommando du har der :/
Skal jeg tage HELE sql 2 og smide ind i sql 1's Select sætning?
Og kan man bruge UNION til det?
Skal jeg tage HELE sql 2 og smide ind i sql 1's Select sætning?
Og kan man bruge UNION til det?
patrickpetersen (3) skrev:den forstår jeg ikke den kommando du har der
Trist.
patrickpetersen (3) skrev:Skal jeg tage HELE sql 2 og smide ind i sql 1's Select sætning?
Nej. Du skal erstatte den første SELECT ... med SQL 1 og den anden med SQL 2.
patrickpetersen (3) skrev:Og kan man bruge UNION til det?
Nej. UNION putter queries oven over hinanden. JOIN putter queries ved siden af hinanden.
patrickpetersen (3) skrev:#2, den forstår jeg ikke den kommando du har der :/
Der er en beskrivelse af subqueries her:
http://beginner-sql-tutorial.com/sql-subquery.htm
Det ville være lidt lettere at svare simpelt på spørgsmålet hvis ikke det var to kæmpe store og sammenblandede queries du bruger som eksempel.
Nu prøver jeg at skære det lidt ud i pap, uden at det bliver for kompliceret at læse:
-- Det samlede resultat her
SELECT T1.Leverandør, T1.[70941]/T2.[544]*100
-- Hele din lange select 1 her
FROM Table1 AS T1
INNER JOIN
(
-- Hele din lange select 2 her
SELECT * FROM Table2
)
AS T2 ON T1.Leverandør=T2.Leverandør
Nu prøver jeg at skære det lidt ud i pap, uden at det bliver for kompliceret at læse:
-- Det samlede resultat her
SELECT T1.Leverandør, T1.[70941]/T2.[544]*100
-- Hele din lange select 1 her
FROM Table1 AS T1
INNER JOIN
(
-- Hele din lange select 2 her
SELECT * FROM Table2
)
AS T2 ON T1.Leverandør=T2.Leverandør
#6 Mort, det er fordi det er de 2 queries jeg bruger.. Den er ikke så slem hvis man piller aller inner joins fra.. efter at have prøvet din metode får jeg blot en fejl :(
Simpelt sagt, vil jeg gerne have at den ene række har nogle værdier som har nogle restriktioner (indeholder kun værdier fra katagori 1 og 2) og den anden har det samme række kørende, blot uden restriktionerne.
Simpelt sagt, vil jeg gerne have at den ene række har nogle værdier som har nogle restriktioner (indeholder kun værdier fra katagori 1 og 2) og den anden har det samme række kørende, blot uden restriktionerne.
For at gøre det lidt mere overskueligt har jeg lavet et lille billede:
http://peecee.dk/upload/view/308495
Meningen er, at jeg skal have de 70xxx op i den anden query, men jeg kan ikke få den til at vise 70xxx i første række, da jeg har en HAVING sætning i den, som bestemmer om det er fejltype 1 eller fejltype 2..
Den query jeg gerne vil have skal tage de 544 og 137 og lægge dem sammen, dividere dem med de 70xxx - håber det gør det mere overskueligt :)
http://peecee.dk/upload/view/308495
Meningen er, at jeg skal have de 70xxx op i den anden query, men jeg kan ikke få den til at vise 70xxx i første række, da jeg har en HAVING sætning i den, som bestemmer om det er fejltype 1 eller fejltype 2..
Den query jeg gerne vil have skal tage de 544 og 137 og lægge dem sammen, dividere dem med de 70xxx - håber det gør det mere overskueligt :)
Det gav mig en hel anden forståelse af hvad du har brug for.
Prøv med denne her så:
SELECT T1.Leverandør, T1.År, T1.FejlNavn, T1.FejlTypeNr, AntalFejl/T2.Stk
FROM
(
SELECT Leverandør, År, FejlNavn, FejlTypeNr, SUM(AntalFejl) AS AntalFejl
FROM Table1
GROUP BY Leverandør, År, FejlNavn, FejlTypeNr
) AS T1
INNER JOIN Table2 AS T2 ON T2.Leverandør=T1.Leverandør
Prøv med denne her så:
SELECT T1.Leverandør, T1.År, T1.FejlNavn, T1.FejlTypeNr, AntalFejl/T2.Stk
FROM
(
SELECT Leverandør, År, FejlNavn, FejlTypeNr, SUM(AntalFejl) AS AntalFejl
FROM Table1
GROUP BY Leverandør, År, FejlNavn, FejlTypeNr
) AS T1
INNER JOIN Table2 AS T2 ON T2.Leverandør=T1.Leverandør
Mener du sådan her? Eller er jeg helt tabt?
Og hvordan sørger jeg for, at den fejltype der kommer som tæller i regnestykket kun er fejltype 1 og 2 (leverandørfejl)?
SELECT Leverandør.Navn AS Leverandør, year(dato) AS År, FejlTyper.Fnavn AS FejlNavn, FejlTyper.FtNr AS FejlTypeNr, Round((Sum([Fejl].[AntalF])*100)/Sum([Produktion].[PAntal]),2) AS FejlPct
FROM
(
SELECT Leverandør.Navn, year(dato) AS År, FejlTyper.Fnavn AS FejlNavn, FejlTyper.FtNr AS FejlTypeNr, SUM([Fejl].[AntalF]) AS AntalFejl
FROM Leverandør INNER JOIN (((Fejl INNER JOIN FejlTyper ON Fejl.FtNr = FejlTyper.FtNr) INNER JOIN Produkter ON Fejl.Vnr = Produkter.Vnr) INNER JOIN AcrylPlader ON Produkter.PladeNr = AcrylPlader.PladeNr) ON Leverandør.LevNr = AcrylPlader.LevNr
GROUP BY Leverandør.Navn,
) AS T1
Leverandør INNER JOIN AcrylPlader ON Leverandør.LevNr = AcrylPlader.LevNr) INNER JOIN Produkter ON AcrylPlader.PladeNr = Produkter.PladeNr) INNER JOIN Produktion ON Produkter.Vnr = Produktion.Vnr
Og hvordan sørger jeg for, at den fejltype der kommer som tæller i regnestykket kun er fejltype 1 og 2 (leverandørfejl)?
Jeg har prøvet at slå op i en SQL bog.. Er det i sådan et tilfælde som mit, at man benytter "DISTINCTROW" ? :)
SELECT [Output 1].*, [Output 2].Fejltypenr, [Output 2].[Antal Fejl], [Output 1].Stk, ([Output 2].[Antal Fejl]/[Output 1].Stk * 100) AS DitFelt FROM [Output 1] INNER JOIN [Output 2] ON [Output 1].Leverandør=[Output 2].Leverandør AND [Output 1].År=[Output 2].År
Sådan fik jeg det til at virke :) Det car egentlig forholdsvis simple :) Tak for hjælpen! :)
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.