Antwort
 
Themen-Optionen Thema durchsuchen
Alt 23.09.2008, 20:11 Nach oben    #1
Neuer Benutzer
 
Registriert seit: 23.09.2008
Beiträge: 4
Standard MSSQL join-Abfragen

Hallo Leute,

ich beschäftige mich seit einiger Zeit mit MSSQL.

Mein bisheriger Code:
sql Code:
  1. SELECT k1.cKundenNr, k1.cName, k1.cVorname, k1.cStrasse, k1.cPLZ, k1.cOrt, k1.cEbayName,
  2. COUNT(k.cName) AS AnzahlBestellungen, SUM (tbestellpos.fVKPreis * tbestellpos.nAnzahl) AS SUMME
  3. FROM tRechnung
  4.  
  5. LEFT JOIN tbestellpos ON (tRechnung.tBestellung_kBestellung = tbestellpos.tBestellung_kBestellung)
  6. LEFT JOIN tkunde k1 ON (tRechnung.tkunde_kkunde = k1.kKunde)
  7.  
  8. WHERE (cBezahlt =  'Y')
  9. GROUP BY k1.cKundenNr, k1.cName, k1.cVorname, k1.cStrasse, k1.cPLZ, k1.cOrt, k1.cEbayName

Ich müsste 2 Abfragen vereinen.
1. Abfrage für den Gesamtumsatz pro Kunde:
sql Code:
  1. FROM tRechnung
  2. LEFT JOIN tbestellpos ON (tRechnung.tBestellung_kBestellung = tbestellpos.tBestellung_kBestellung)
  3. LEFT JOIN tkunde k1 ON (tRechnung.tkunde_kkunde = k1.kKunde)

2. Abfrage Anzahl Bestellungen pro Kunde
sql Code:
  1. FROM tKunde k
  2. INNER JOIN tbestellung b ON (k.kkunde = b.tkunde_kkunde)

Wie mache ich das?
Mein Problem ist, das ich bei JOIN nur ein FROM-Tabelle angeben kann.

Kann mir jemand helfen?

Gruß
Mike

Geändert von Jann Hendrik (24.09.2008 um 07:58 Uhr)
mike2707 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.09.2008, 07:58 Nach oben    #2
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.374
Standard

Willkommen im Forum.

Ich habe mal deinen post editiert und den tag dafür eingebaut, dass der Code anders dargestellt wird, was das lesen des selbigen erleichtert.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 30.09.2008, 19:32 Nach oben    #3
Neuer Benutzer
 
Registriert seit: 23.09.2008
Beiträge: 4
Standard

1.
sql Code:
  1. SELECT k.cKundenNr, k.cName, k.cVorname, k.cStrasse, k.cPLZ, k.cOrt, k.cEbayName,
  2. COUNT(k.cName) AS AnzahlBestellungen
  3. FROM tKunde k
  4. INNER JOIN tbestellung b ON (k.kkunde = b.tkunde_kkunde)
  5. GROUP BY k1.cKundenNr, k1.cName, k1.cVorname, k1.cStrasse, k1.cPLZ, k1.cOrt, k1.cEbayName

2.
sql Code:
  1. SUM (tbestellpos.fVKPreis * tbestellpos.nAnzahl) AS SUMME
  2. LEFT JOIN tbestellpos ON (tRechnung.tBestellung_kBestellung = tbestellpos.tBestellung_kBestellung)
  3. LEFT JOIN tkunde k1 ON (tRechnung.tkunde_kkunde = k1.kKunde)
  4. WHERE (cBezahlt =  'Y')

Ich möchte diese beiden Abfragen vereinen. Habe schon so einiges versucht, aber ohne Erfolg.

Ich bräuchte entweder beiden Abfragen vereint zu einer oder ich muss einen Weg finden, wie ich die beiden Abfragen in ein ResultSet (Java) schreibe.

Danke.

Vielleicht kommt noch eine Antwort.

Gruß
Mike

Geändert von Jann Hendrik (01.10.2008 um 07:58 Uhr)
mike2707 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.10.2008, 08:07 Nach oben    #4
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.374
Standard

Ich kann dir inhaltlich nicht helfen, bitte dich aber darum, meine Bitte in Zukunft nicht zu ignorieren. Hier nochmal ein wenig ausführlicher für dich:

sql-tag
Um SQL-Code farbig darzustellen kannst du einfach den [highlight]-tag nutzen:
[highlight=sql]
SELECT
`feldname`
FROM
`tabellenname`
[/highlight]
So sieht der Code dafür aus. Wenn du deinen SQL-Code damit formatierst, dann bearbeitet die Foren-Software das für highlight für dich.
Dies erleichtert das Lesen für andere enorm! Daher bitten wir dich in Zukunft auf die Verwendung zu achten. Danke.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 01.10.2008, 20:12 Nach oben    #5
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 582
Standard

Das Stichwort sind Subselects.

Ich habe allerdings noch nie mit MSSQL gearbeitet, daher weiss ich nicht ob die Datenbank das kann.

Ich kann aber bei Bedarf gerne ein Beispiel nachliefern wie es unter postgreSQL funktionieren würde.

Gruß
Sparrow
sparrow ist gerade online  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 04.10.2008, 23:05 Nach oben    #6
Neuer Benutzer
 
Registriert seit: 23.09.2008
Beiträge: 4
Standard

Hallo sparrow,

ich bin für jede hilfe bzw. vorschlag dankbar.

also, her mit dem code

gruß
mike
mike2707 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.10.2008, 13:37 Nach oben    #7
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 582
Standard

Gut, dann schau ich mir das heute Abend wohl mal an.

Nur damit ich das richtig sehe: Das Ergebnis soll einen Zeile für jeden Kunden sein? Inklusive Anzahl aller Bestellungen und Gesamtumsatz?
sparrow ist gerade online  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.10.2008, 20:06 Nach oben    #8
Neuer Benutzer
 
Registriert seit: 23.09.2008
Beiträge: 4
Standard

hallo,

ja, das siehst du richtig. das ergebnis der abfrage2 soll als spalte hinter der abfrage1 stehen, damit ich das ergebnis in ein resultset schreiben kann.

danke für deine hilfe.

das habe ich bis jetzt:

[highlight=sql]
SELECT k.cKundenNr, k.cFirma, k.cAnrede, k.cVorname, k.cName, k.cStrasse, k.cPLZ, k.cOrt, k.cLand, k.cEbayname, k.cSperre, COUNT(k.cName) AS AnzahlBestellungen , (CONVERT (varchar(10), (MIN(CAST(b.dErstellt AS smallDATETIME))),104)) AS ersteBestellung, (CONVERT (varchar(10), (MAX(CAST(b.dErstellt AS smallDATETIME))),104)) AS letzteBestellung,

(
SELECT SUM (tbestellpos.fVKPreis * tbestellpos.nAnzahl)
FROM tRechnung
LEFT JOIN tbestellpos ON (tRechnung.tBestellung_kBestellung = tbestellpos.tBestellung_kBestellung)
LEFT JOIN tkunde k2 ON (tRechnung.tkunde_kkunde = k2.kKunde)
) as summe


FROM tkunde k
INNER JOIN tbestellung b ON (k.kkunde = b.tkunde_kkunde)
WHERE (k.cAktiv = 'Y')
group by k.cKundenNr, k.cFirma, k.cAnrede, k.cVorname, k.cName, k.cStrasse, k.cPLZ, k.cOrt, k.cLand, k.cEbayname, k.cSperre
order by k.cKundenNr

nur hier wird die summe nicht pro kunde ausgegeben.


danke und gruß
mike
mike2707 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.10.2008, 20:55 Nach oben    #9
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.374
Standard

Sry, wenn ich nochmal nachfrage, aber... bisher hat sich keiner so sehr geweigert die BBCodes zu benutzen...

Wenn du Probleme mit der Benutzung von BBCodes hast, dann lass es mich wissen, dann erkläre ich dir das gerne nochmal.

Ich gebe dir mal die Chance deinen post nun selbst zu editieren.
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.10.2008, 23:10 Nach oben    #10
Sesselkleber
 
Benutzerbild von sparrow
 
Registriert seit: 17.01.2005
Beiträge: 582
Standard

Ich kenne dein Datenbankschema nicht, daher hab ich ein eigenes genommen.
Das musst du dann auf deine Datenbank umschreiben.

Das ganze ist eine Hardkopie aus psql und eigentlich selbsterklärend:

Code:
test=# \dt
             Liste der Relationen
 Schema |     Name     |   Typ   | Eigentümer
--------+--------------+---------+------------
 public | bestellungen | Tabelle | postgres
 public | bestpos      | Tabelle | postgres
 public | kunden       | Tabelle | postgres
(3 Zeilen)

test=# SELECT * FROM kunden;
 nr |    name
----+-------------
  1 | Kunde Nr. 1
  2 | Kunde Nr. 2
  3 | Kunde Nr. 3
  4 | Kunde Nr. 4
(4 Zeilen)

Zeit: 1,336 ms
test=# SELECT * FROM bestellungen;
 nr | kommentar | kunde
----+-----------+-------
  1 | 1.1       |     1
  2 | 1.2       |     1
  3 | 1.3       |     1
  4 | 2.1       |     2
  5 | 3.1       |     3
  6 | 3.2       |     3
  7 | 3.3       |     3
  8 | 3.4       |     3
  9 | 4.1       |     4
 10 | 4.2       |     4
(10 Zeilen)

Zeit: 1,091 ms
test=# SELECT * FROM bestpos;
 bestellung | artikel | menge | preis
------------+---------+-------+-------
          1 |       1 |     5 |     5
          2 |       2 |    15 |    15
          3 |       1 |     5 |     5
          4 |       2 |    15 |    15
          5 |       1 |     5 |     5
          6 |       2 |    15 |    15
          7 |       1 |     5 |     5
          8 |       2 |    15 |    15
          9 |       2 |    15 |    15
         10 |       2 |    15 |    15
(10 Zeilen)

Zeit: 0,890 ms
test=# SELECT k.nr, k.name, COUNT (k.name) AS anzahl_bestellungen
test-# FROM kunden k
test-# INNER JOIN bestellungen b ON (k.nr = b.kunde)
test-# GROUP BY k.nr, k.name;
 nr |    name     | anzahl_bestellungen
----+-------------+---------------------
  1 | Kunde Nr. 1 |                   3
  4 | Kunde Nr. 4 |                   2
  3 | Kunde Nr. 3 |                   4
  2 | Kunde Nr. 2 |                   1
(4 Zeilen)

Zeit: 2,235 ms
test=# SELECT b.kunde, SUM(bp.menge * bp.preis)
test-# FROM bestpos bp INNER JOIN bestellungen b ON (bp.bestellung = b.nr)
test-# GROUP BY b.kunde;
 kunde | sum
-------+-----
     4 | 450
     2 | 225
     3 | 500
     1 | 275
(4 Zeilen)

Zeit: 1,402 ms
test=# SELECT k.nr, k.name, COUNT (k.name) AS anzahl_bestellungen, umsatz.summe
test-# FROM kunden k
test-# INNER JOIN bestellungen b ON (k.nr = b.kunde)
test-# INNER JOIN (SELECT bi.kunde, SUM(bp.menge * bp.preis) AS summe
test(# FROM bestpos bp INNER JOIN bestellungen bi ON (bp.bestellung = bi.nr)
test(# GROUP BY bi.kunde) AS umsatz ON (k.nr = umsatz.kunde)
test-# GROUP BY k.nr, k.name, umsatz.summe;
 nr |    name     | anzahl_bestellungen | summe
----+-------------+---------------------+-------
  2 | Kunde Nr. 2 |                   1 |   225
  3 | Kunde Nr. 3 |                   4 |   500
  1 | Kunde Nr. 1 |                   3 |   275
  4 | Kunde Nr. 4 |                   2 |   450
(4 Zeilen)

Zeit: 2,239 ms

Wie gesagt, ich hab keine Ahnung ob das unter MSSQL überhaupt geht, aber unter postgreSQL sind subselects kein Problem.
Falls du dazu Fragen hast, immer heraus damit.


Gruß
Sparrow
sparrow ist gerade online  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zur MSSQL und JOINS phpdev Datenbanken 8 05.11.2007 18:46
Welches Join soll ich verwenden? Chr!s Datenbanken 8 06.07.2006 12:33
mit LEFT OUTER JOIN mehr als 2 Tabellen verknüpfen ? Alpha Centauri Datenbanken 4 06.04.2006 19:00
2 Abfragen einer Tabelle zusammenfassen - JOIN? derMaggus Datenbanken 15 24.08.2005 17:40
MSSQL anbinden ? ODBC ? JDBC ? rola Datenbanken 5 11.01.2005 19:03


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45