3 Stimmen

SQL SELECT mit mehreren Tabellen und SUM

Ich benutze dieses Forum nun schon seit einiger Zeit, um Antworten auf einige SQL-bezogene Fragen zu finden. Jetzt ist es an der Zeit, eine Frage zu stellen, die ich schon seit einiger Zeit zu klären versuche.

Ich habe zwei Tabellen (Produkt und Quelle).

Ich möchte einen SQL SELECT erstellen, um eine Liste von Datensätzen aus der Quelle und einen zusätzlichen Datensatz aus dem Produkt (eine SUMME des Preises) abzurufen. Die Tabelle, die ich gerne sehen würde, sollte etwa so aussehen:

quelle.quelle_id | quelle.ort | quelle.quelle_name | quelle.quelle_beschreibung | quelle.quelle_datum | quelle.preis | SUM(produkt.preis) | SUM(produkt.preis) WHERE produkt.menge < 1 (in dieser letzten Spalte bleibe ich stecken).

source.location und product.location sind miteinander verknüpft.

Dieser Code funktioniert und liefert das gewünschte Ergebnis:

SELECT s.source_id
    , s.location
    , s.source_name
    , s.source_description
    , s.source_date
    , s.source_price
    , p2.Total
    , sum(p1.price) as SumProductSold
FROM source s
JOIN product p1
    on s.location = p1.location
JOIN
(
    SELECT location, sum(price) as Total
    FROM product
    GROUP BY location
) p2
    on s.location = p2.location
WHERE p1.quantity < 1
GROUP BY s.source_id, s.location, s.source_name
    , s.source_description, s.source_date, s.source_price, p2.Total

Danke, bluefeet!!

4voto

Taryn Punkte 233818

Ohne viele Details kann man so etwas machen:

SELECT s.source_id
    , s.location
    , s.source_name
    , s.source_description
    , s.source_date
    , s.price
    , sum(p.price) as SumProductPrice
    , sum(p.location) as SumProductLocation
FROM source S
JOIN product p
    on S.location = p.location
WHERE p.quantity < 1
GROUP BY s.source_id, s.location, s.source_name
    , s.source_description, s.source_date, s.price

Wenn Sie mehr Details angeben, kann die Abfrage feiner abgestimmt werden.

EDIT :

können Sie die Tabelle mit den Produkten ein zweites Mal aufrufen, um die Gesamtsumme für den Ort zu erhalten:

SELECT s.source_id
    , s.location
    , s.source_name
    , s.source_description
    , s.source_date
    , s.price
    , sum(p1.price) as SumProductPrice
    , p2.Total
FROM source S
JOIN product p1
    on S.location = p1.location
JOIN
(
    SELECT location, sum(price) as Total
    FROM product
    WHERE quantity < 1
    GROUP BY location
) p2
    on S.location = p2.location
WHERE p1.quantity < 1
GROUP BY s.source_id, s.location, s.source_name
    , s.source_description, s.source_date, s.price, p2.Total

0voto

Brian Hoover Punkte 7793

Ich bin mir nicht sicher, ob ich Ihre Tabellenstruktur richtig verstehe, aber so etwas sollte funktionieren:

Select source.source_id, 
  source.location, 
  source.source_name, 
  source.source_description,
  source.source_date,
  source.price,
  sum(production.location)
from source, product
  where source.location = production.location
  and location < 0
group by source.source_id, 
  source.location, 
  source.source_name, 
  source.source_description,
  source.source_date,
  source.price

0voto

GarethD Punkte 66029

Soweit ich weiß, wollen Sie so etwas:

SELECT  source.source_id,
        source.location,
        source.source_name,
        source.source_description,
        source.source_date,
        source.price,
        SUM(product.price) AS Price1,
        SUM(CASE WHEN product.quantity < 1 THEN product.price ELSE 0 END)  AS Price2
FROM    Source
        INNER JOIN Product
            ON Product.Location = Source.Location
GROUP BY 
        source.source_id,
        source.location,
        source.source_name,
        source.source_description,
        source.source_date,
        source.price

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X