ottscho
Goto Top

SQL Statment zwei Tabellen

Hallo zusammen,

ich habe zwei Tabellen:

Angebote
KDNR ; Angebotnr ; Datum ;

Aufträge
KDNR ; Auftragnummer; Datum ;

Nun möchte ich einen Abfrage über jede Tabelle, das Ergebnis aber zusammenführen.

Abfrage1:
select kdnr, count(angebotnr) As AngebotAnzahl from angebote
where datum > '01.01.2009'
group by kdnr

als ergebnis bekomme ich:
kdnr ; AngebotAnzahl ;
1 ; 10 ;
2 ; 29 ;
usw.

Das gleiche kann ich mit Tabelle Aufträge machen, dann sieht das Ergebnis so aus:
kdnr ; AuftragAnzahl ;
1 ; 5 ;
2 ; 10 ;
usw.

Nun möchte ich aber eine Kombination aus beiden Ergebnis, welche so aussehen soll:
kdnr ; AngebotAnzahl ; AuftragAnzahl;
1 ; 10 ; 5 ;
2 ; 29 ; 10 ;
usw.

Kann ich dies mit reinem SQL verwirklichen oder benötige ich eine Procedur? (MSSQL2005)

Danke
Gruß
ottscho

Content-Key: 120026

Url: https://administrator.de/contentid/120026

Printed on: April 25, 2024 at 19:04 o'clock

Member: BCCray
BCCray Jul 08, 2009 at 13:51:19 (UTC)
Goto Top
Hallo ottscho,

probier mal folgende query (bin ausm Kopf schreiben nicht der beste - also wenns nicht klappt... liegts an mir face-smile )

SELECT KDNR, COUNT(angebotnr) AS AngebotAnzahl, COUNT(auftragnummer) AS AuftragsAnzahl
FROM angebote ag join auftraege a where ag.kdnr = a.kdnr;

dürfte evtl zu dem gewünschten Ergebnis führen... so in der Art....

Greetz
Member: ottscho
ottscho Jul 08, 2009 at 14:00:10 (UTC)
Goto Top
Sorry, so kann es nicht gehen. Da bei Count ja die Ergebnisse gezählt werden und diese hier in einer Zeile stehen...
Sprich bei Count(angebotnr) und Count (auftragsnummer) kommen die gleiche Anzahl raus.

Zwischen den beiden Tabellen gibt es keine Beziehung!

Danke dir trotzdem...
Member: BCCray
BCCray Jul 08, 2009 at 14:01:42 (UTC)
Goto Top
stimmt..... hmm, aber vielleicht klappts mit einer Subselect und dann einen vergleich mit der KDNR?
Member: Biber
Biber Jul 08, 2009 at 14:03:47 (UTC)
Goto Top
Moin ottscho,

versuch es so.
SELECT * FROM (
SELECT kdnr, count(angebotnr) As AngebotAnzahl, 0 as AuftragAnzahl 
         FROM angebote where datum > '01.01.2009'  
        Group by kdnr
UNION all
SELECT kdnr, 0, Count (AuftragNr)  
        FROM Auftrag where datum > '01.01.2009'  
       group by kdnr
)
ORDER By 1;

Grüße
Biber
Member: ottscho
ottscho Jul 08, 2009 at 14:09:22 (UTC)
Goto Top
SELECT * FROM (
SELECT name, count(new_angebotnr) As AngebotAnzahl,
0 as AuftragAnzahl
FROM new_twangbot
where new_angebotdatum > '01.01.2009'   
Group by name 

UNION all 

SELECT name,
0,
Count (new_auftragnr)   
FROM new_twauftrag
where auftragdatum > '01.01.2009'   
group by name )
 
ORDER By 1

Fehler:
Meldung 156, Ebene 15, Status 1, Zeile 17
Falsche Syntax in der Nähe des 'ORDER'-Schlüsselwortes.
Member: Biber
Biber Jul 08, 2009 at 20:14:38 (UTC)
Goto Top
SELECT name, sum(WTF) as AngebotAnzahl, sum(IsAlice) as Auftraganzahl 
FROM (
SELECT name, count(new_angebotnr) As WTF,
0 as IsAlice
FROM new_twangbot
WHERE new_angebotdatum > '01.01.2009'   
GROUP BY name 

UNION ALL 

SELECT name,
0,
Count (new_auftragnr)   
FROM new_twauftrag
WHERE auftragdatum > '01.01.2009'   
GROUP BY name 
)
GROUP BY Name
ORDER BY name;
Member: ottscho
ottscho Jul 09, 2009 at 05:56:56 (UTC)
Goto Top
danke für deine bemühungen, aber leider kommt immer noch ein syntaxfehler:

SELECT name, sum(WTF) as AngebotAnzahl, sum(IsAlice) as Auftraganzahl  
FROM ( 
SELECT name, count(new_angebotnr) As WTF, 
0 as IsAlice 
FROM new_twangbot 
WHERE new_angebotdatum > '01.01.2009'    
GROUP BY name  

UNION ALL  

SELECT name, 
0, 
Count (new_auftragnr)    
FROM new_twauftrag 
WHERE new_auftragdatum > '01.01.2009'    
GROUP BY name  
) 
GROUP BY name 
ORDER BY name

fehler:
Meldung 156, Ebene 15, Status 1, Zeile 18
Falsche Syntax in der Nähe des 'GROUP'-Schlüsselwortes.
Member: MadMax
MadMax Jul 09, 2009 at 07:11:04 (UTC)
Goto Top
Moin Ottscho,

probier mal:
select	an.KDNR, an.AngebotAnzahl, au.AuftragAnzahl
from	(
	select	KDNR, count (*) As AngebotAnzahl
	from	Angebote
	where	Datum > '01.01.2009'  
	group by KDNR) an
	join (
	select	KDNR, count (*) As AuftragAnzahl
	from	Aufträge
	where	Datum > '01.01.2009'  
	group by KDNR) au on an.KDNR = au.KDNR

Gruß, Mad Max
Member: ottscho
ottscho Jul 09, 2009 at 07:54:10 (UTC)
Goto Top
super, hat nun bestens funktioniert face-smile

viele dank
Member: ottscho
ottscho Oct 20, 2009 at 15:18:27 (UTC)
Goto Top
Leider funktioniert es doch nicht 100%ig.

Sobald in der einen Tabelle bei Count nicht gezählt wird, wird nachher nicht 0 angezeigt, sondern der komplette Datensatz fällt raus.

Beispiel:
AngeboteAnzahl AuftragAnzahl
Datensatz1 1 1
Datensatz2 1 2
Datensatz3 0 1
Datensatz4 1 0

So sollte es aussehen, aber leider werden die unteren Beiden einfach nicht dargestellt.

Weiß jmd wie ich das SQL Statment ändern kann, dass es funktioniert?

Vielen Dank