2013-07-04 4 views
0

에서 다시에만 최저 가격을 가져 두 개의 테이블에 가입하세요. 각 보트마다 고유 한 ID (pricingRef)가 있습니다. 보트 가격에는 각 보트에 대한 임대 가격 행이 있으며 보트마다 행 수가 제한되어 있습니다. 각 행에는 pricingRef 값도 있습니다. boat_prices 테이블의 데이터 예는 다음과 같을 수 있습니다 : 나는 boat_data 테이블에서 다시 모든 행을 가져오고 각 보트 다시에만 최저 가격을 데려 boat_prices 테이블에 가입하기 만하면 무엇SQL 쿼리는 다음과 같이 내가이 개 MSSQL 테이블이 테이블이

pricingRef > pricingDescription > price 

ASD1 > fullDay > 1500 

ASD1 > perWeek > 9000 

ASD1 > morning > 800 

ASD2 > fullDay > 2000 

ASD2 > perWeek > 12000 

ASD2 > morning > 1100 

. 아래에있는 SQL 문을 작성했습니다. 문제는 정말로 clunky하고 혼란 스럽습니다. boat_prices 테이블에서 가격 값을 가져오고, boat_data 테이블의 각 필드를 명시 적으로 요청한 다음 boat_data 테이블의 모든 필드별로 그룹화 한 min (price)을 사용했습니다.

더 좋은 방법이 있어야합니다. 죄송합니다. 저는 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 

답변

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; 
+1

오 당신이 빠르고 +++ :이 경우 D – mirkobrankovic

+0

그는 "아침"만 가격을 얻을 것이다 원인 그들은 가장 낮습니다. 그는 가장 낮습니다. – mirkobrankovic

+0

@mirkobrankovic : 제이슨이 요구 한 것입니다. "* 각 보트의 최저 가격 만 반환 *". –

0

:

SELECT bp.price, 
     bd.* 
FROM boat_data bd 
JOIN boat_prices bp ON bd.pricingRef = bp.pricingRef 
WHERE bp.price = (SELECT MIN(bp2.price) 
        FROM boat_prices bp2 
        WHERE bp2.pricingRef = bd.pricingRef) 
ORDER BY bp.price