2016-03-31 6 views
0

2つのテーブルの価格が異なる2つの会社のデータがほぼ同じです。特定の列の2つのテーブルから最適な行を取る

低価格の表のいずれかから行を選択したいと思います。

にはどうすれば行を比較して、2台私がこのようクエリを書かれている

から最高値をとるが、価格部分に曖昧さがあるん。

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) 

価格があいまいになっています。どのように解決するのですか?

+1

私たちに助けて도와주세요 - あなたにテーブルの構造、いくつかのサンプルデータ、および返信をしてくださいこのサンプルを入手したいと思っています。 – Mureinik

答えて

1

あなたがMINを使用したい場合は、UNIONでこれを行うことができます。

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

をまたは代わりに、あなたとCASE EXPRESSIONを使用することができます参加:

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

これは私のやり方を変えてくれます。それは私に最大値を与えます。そのデータは無作為に収集されているので、私はPKやFKを持っていません。 – John

+0

私はここで条件をa.price John

0

あなたはこれを試すことができます:

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

これはウォーキングではありません。グループを追加しなければならないと思っています。最低価格はテーブルのいずれかでなければなりません。 – John

+0

あなたはあなたが共有していたコードに基づいてロジックを作成したので、グループを追加する必要があります。グループを追加しませんでした。私は再投稿の私の答えを編集します –

関連する問題