0

次のように 2 つの MSSQL テーブルがあります。

boat_data

boat_prices

ボート データには、ボートに関するデータの行が格納されています。各ボートには一意の ID (pricingRef) があります。ボートの価格には、各ボートのレンタル価格の行が格納されており、ボートごとに任意の数の行を含めることができます。各行には、pricingRef 値もあります。Boat_prices テーブルのデータの例は次のとおりです。

pricingRef > pricingDescription > price

ASD1 > fullDay > 1500

ASD1 > perWeek > 9000

ASD1 > morning > 800

ASD2 > fullDay > 2000

ASD2 > perWeek > 12000

ASD2 > morning > 1100

私がする必要があるのは、boat_data テーブルからすべての行を戻し、それを boat_prices テーブルに結合して、各ボートの最低価格のみを戻すことです。以下に動作するSQL文を書きました。問題は、それが本当に不格好で散らかっていることです。min(price) を使用して、boat_prices テーブルから価格値を取得し、boat_data テーブルの各フィールドを明示的に要求してから、boat_data テーブルのすべてのフィールドでグループ化しました。

これを達成するためのより良い方法があるはずです。申し訳ありませんが、私は SQL の初心者です。助けてください!

select 
min(price) as price,
boat_data.ID,
boat_data.boatRef,
boat_data.capacity,
boat_data.sleeps,
boat_data.fuelConsumption,
boat_data.yearBuilt,
boat_data.length,
boat_data.beam,
boat_data.engines,
boat_data.tender,
boat_data.boatName,
boat_data.cabins,
boat_data.speed,
boat_data.location,
boat_data.onSale,
boat_data.supplierID,
boat_data.boatClassID,
boat_data.pricingRef,
boat_data.crew,
boat_data.sportsEquipment 
from boat_data 
join boat_prices 
     on boat_data.pricingRef = boat_prices.pricingRef 
group by 
boat_data.ID,
boat_data.boatRef,
boat_data.capacity,
boat_data.sleeps,
boat_data.fuelConsumption,
boat_data.yearBuilt,
boat_data.length,
boat_data.beam,
boat_data.engines,
boat_data.tender,
boat_data.boatName,
boat_data.cabins,
boat_data.speed,
boat_data.location,
boat_data.onSale,
boat_data.supplierID,
boat_data.boatClassID,
boat_data.pricingRef,
boat_data.crew,
boat_data.sportsEquipment 
order by price
4

2 に答える 2

2

このようなもの:

select boat_data.*,
       t.min_price
from boat_data
  join (
     select pricingref, min(price) as min_price
     from boat_prices
     group by pricingref
  ) t on t.pricingref = boat_data.pricingref;
于 2013-07-04T11:02:22.263 に答える