2017-03-27 4 views
0

Struggle mit korrelierten Abfragen und wollte wissen, ob jemand könnte ein besseres Beispiel/Erklärung, wie eine 'korrelierte Abfrage erstellen. Ich verstehe, dass die inneren/äußeren Anfragen voneinander abhängig sind, aber immer noch nicht glauben, dass meine Lösung korrekt ist oder ich fühle mich sehr sicher, wenn ich sie kodiere und daran denke, konvertierende Abfragen zu üben. Hier ist beispielsweise der Arbeits query:Wie man Abfrage in korrelierte Abfrage konvertiert

SELECT p.productid, p.productname, SUM(od.unitprice - od.discount) * od.qty 
    AS total_amount 
    FROM Production.Products AS p 
    JOIN Sales.OrderDetails AS od 
    ON p.productid = od.productid 
    JOIN Sales.Orders AS o 
    ON od.orderid = o.orderid 
    WHERE o.shipcountry = 'USA'; 

--EDITED--Converted to Correlated Query 

Also, wenn ich wollte diese in einer korrelierten Unterabfrage drehen sollte dies die Lösung sein. Danke für die Anleitung und den Rat.

SELECT productid, productname 
FROM Production.Products AS t1 
WHERE productid = (SELECT SUM(od.unitprice - od.discount) * od.qty AS 
total_amount 
    FROM Sales.OrderDetails AS od 
     JOIN Sales.Orders AS o 
    ON od.orderid = o.orderid 
    JOIN Production.Products AS t2 
    ON t2.productid = t1.productid 
    WHERE o.shipcountry = 'USA') 
GROUP BY productid, productname; 

Danke für die Anleitung und Beratung.

Antwort

1

Da Sie von den beiden Produkten und Orderdetails Tabelle auswählen, sollten Sie die basierte Lösung einsetzen, kommen nur:

select p.productid, 
    p.productname, 
    SUM((od.unitprice - od.discount) * od.qty) as total_amount 
from Production.Products as p 
join Sales.OrderDetails as od on p.productid = od.productid 
join Sales.Orders as o on od.orderid = o.orderid 
where o.shipcountry = 'USA' 
group by p.productid, 
    p.productname 

Notiere die hinzugefügt group by Klausel wie Sie verwenden sum (auch festgelegt).

1

Ich denke, das ist das, was Sie wollen:

SELECT p.productid, p.productname, 
     SUM(od.unitprice - od.discount) * p.qty AS total_amount 
FROM Production.Products p JOIN 
    Sales.Orders o JOIN 
    Sales.OrderDetails od 
    ON o.orderid = od.orderid 
WHERE o.shipcountry = 'USA' 
GROUP BY p.productid, p.productname; 

Eine korrelierte Unterabfrage hier nicht geeignet ist. Sie geben Ergebnisse aus mehreren Tabellen zurück. Tun Sie einfach die JOIN s korrekt mit einer GROUP By.

+1

Stückpreis und Rabatt sind in OrderDetails Tabelle für OP aus irgendeinem Grund – GurV

+0

ja, habe vergessen, die Gruppe von dort setzen. Ob es angemessen ist oder nicht, trifft die zweite Abfrage korrelierte Unterabfrage (Hinzufügen der Gruppe natürlich)? Die Produkt-ID aus der äußeren Abfrage stimmt mit der inneren Abfrage überein, und das Ergebnis wird hinzugefügt? – allendks45

+0

@ allenks45. . . Ich verstehe deinen Kommentar nicht. Diese Version hatte immer eine "Gruppe von". –

Verwandte Themen