2016-10-19 3 views
0

참여 제한 -내가 같은 테이블의 몇이있는 경우 수량

Table1 
----------------------------- 
Name      Qty 
----------------------------- 
John      1 
Paul      2 
       ... 
Ringo      1 

Table2 
----------------------------- 
Forename Surname  Cost 
----------------------------- 
John  Smith  123 
John  Jones  815  
Paul  Smith  273 
Paul  Jones  297 
      ... 
Ringo  Smith  755 
Ringo  Jones  334 

과 수량으로 정렬 각 부분 집합에 의해 표 2에서 반환 그래서 쿼리를 구성하려면 다음 Table2.Cost 및 Table1.Qty에 의해 제한된 반환 :

Results 
----------------------------- 
Forename Surname  Cost 
----------------------------- 
John  Jones  815 
Paul  Jones  297 
Paul  Smith  273 
Ringo  Smith  755 

이 방법이 있습니까?

+1

결과의 논리는 무엇입니까? 귀하의 질의를 작성하여 오류가 발생했음을 알려주십시오 – Ravi

+0

@Ravi는보기가 쉽지 않지만 가장 비싼 Jhon, 가장 비싼 Paul 2 위, 가장 비싼 Ringo를 원합니다. –

답변

0
SELECT Forename, 
     Surname, 
     Cost 
    FROM 
    (
     SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY Forename ORDER BY Cost DESC) 
       AS rn 
      FROM Table2 
    ) 
WHERE rn = 1; 
+0

귀하의 질의 응답은 하나의 기록을 반환합니다 –

2

보십시오이 하나

SELECT T.Forename,T.Surname, T.Cost 
    FROM 
    (
     SELECT *, 
       ROW_NUMBER() OVER (PARTITION BY Forename ORDER BY Cost DESC) 
       AS rn 
      FROM Table2 
    ) T 
JOIN Table1 ON Table2.Foreman=Table1.Name 
WHERE T.rn <=Qty; 
+0

감사합니다,이 잘 작동 –

0

업데이트 및 시험 : 그것은 표 1에서 수량에 따라 표 2에서 가장 높은 비용을 얻기에 관하여 있다면는, 다음을 사용 :

CREATE TABLE #table1 (name NVARCHAR(100), qty INT); 
CREATE TABLE #table2 (forename NVARCHAR(100), surname NVARCHAR(100), cost INT); 

INSERT INTO #table1 VALUES 
('John', 1), 
('Paul', 2), 
('Ringo', 1); 

INSERT INTO #table2 VALUES 
('John', 'Smith', 123), 
('John', 'Jones', 815), 
('Paul', 'Smith', 273), 
('Paul', 'Jones', 297), 
('Ringo', 'Smith', 755), 
('Ringo', 'Jones', 334); 

WITH DATA AS (
SELECT t2.forename, t2.surname, t2.cost, t1.qty, 
rn = ROW_NUMBER() OVER (PARTITION BY t1.name ORDER BY t2.cost DESC) 
FROM 
    #table1 t1 
    INNER JOIN #table2 t2 ON t1.name = t2.forename 
) 
SELECT d.forename, d.surname, d.cost 
    FROM 
DATA d 
WHERE d.rn <= d.qty 
+0

감사합니다,이 잘 작동 –

0
create table #table1(name varchar(100), qty int) 
create table #table2 (forename varchar(100), surname varchar(100), cost int) 

insert into #table1 values 
('John',1), 
('Paul',2), 
('Ringo',1) 

insert into #table2 values 
('John' ,  'Smith'  , 123), 
('John' , 'Jones' , 815) , 
('Paul' ,  'Smith' , 273), 
('Paul' ,  'Jones' , 297), 
('Ringo' ,  'Smith' , 755), 
('Ringo' ,  'Jones' , 334) 

select * from 
#table1 t1 cross apply 
    (select top (t1.qty) * from #table2 t2 where t1.name = t2.forename order by t2.cost desc) t 
+0

감사합니다 Shishir,이 작품은 매우 간결합니다. –

관련 문제