2016-03-31 17 views
0

Ich habe zwei Tabellen mit fast den gleichen Daten von zwei Unternehmen mit unterschiedlichen Preisen.Nehmen Sie die beste Zeile aus zwei Tabelle auf einer bestimmten Spalte

Ich möchte die Zeile aus einer der Tabelle auswählen, die einen niedrigen Preis hat.

Wie vergleiche ich Zeilen und nehme den besten Wert aus der beide Tabelle

Ich habe die Abfrage als dies geschrieben, aber es ist eindeutig im Preis teil.

select min(Price), Brand, a.Color 
from [table1] a, table2 b 
where a.BrandName = b.BrandName and a.Shape like b.Shape 
     and (a.color = b.color or a.Color is null) 

Ich bekomme Mehrdeutigkeit Fehler im Preis. Wie löse ich es?

+1

Helfen Sie uns, Ihnen zu helfen - teilen Sie uns bitte Tabellenstrukturen, einige Beispieldaten und das Ergebnis Sie möchten für dieses Beispiel erhalten. – Mureinik

Antwort

1

Sie können dies tun mit UNION wenn Sie MIN wollen verwenden:

SELECT min(price),brand,max(color) 
FROM (select price,brand,color FROM table1 
     UNION 
     select price,brand,'' FROM table2) 
GROUP BY brand 

Oder alternativ können Sie CASE EXPRESSION mit einem verwenden beitreten:

select CASE WHEN a.price > b.price then b.price else a.price end as min_price 
     ,a.Brand 
     ,a.Color 
from table1 a 
INNER JOIN table2 b 
ON a.BrandName=b.BrandName 
WHERE and a.Shape like b.Shape and (a.color=b.color or a.Color is null) 
+0

Das gibt mir den umgekehrten Weg. es gibt mir den maximalen Wert. Ich habe keine PK oder FK, weil es nur die zufällig gesammelten Daten sind. – John

+0

Ich habe gerade die Bedingung geändert als a.price John

0

Können Sie dies versuchen:

select 
    case when min(a.price)<min(b.price) then min(a.price) else min(b.price) end as  min_price, 
    Brand,a.Color from [table1] a, table2 b where a.BrandName=b.BrandName and a.Shape = b.Shape and a.color=b.color 
group by Brand,a.color 
    UNION 
    select 
    case when min(a.price)<min(b.price) then min(a.price) else min(b.price) end as  min_price, 
    Brand,a.Color from [table1] a, table2 b where a.BrandName=b.BrandName and a.Shape = b.Shape and a.Color is null 
group by Brand,a.color 
+0

Dies ist nicht woking Ich denke, dass Sie Gruppe hinzufügen müssen auch und der Mindestpreis sollte von einem der Tabelle sein. – John

+0

ya Sie müssen eine Gruppe hinzufügen, indem ich die Gruppe nicht hinzugefügt habe, weil ich die Logik basierend auf dem Code erstellt habe, den Sie geteilt haben. Ich werde re Post meine Antwort bearbeiten –