2017-03-07 17 views
1
Table1: 
Id Word Frequency 
1 A 1 
2 B 5 


Table2: 
Id Word SecondWord SecondFrequency 
1 A A1  1   
2 A A2  5 
3 A A3  10 
4 A A4  9 
5 A A5  20 
6 B B1  5 
7 B B2  8 
8 B B3  50 
9 B B4  40 
10 B B5  68 

需要的輸出 前3名的記錄從「表2」 SQL連接與SecondFrequency說明 防爆訂單。情結與前10排

Word Frequency SecondWord SecondFrequency 
A 1  A5  20 
A 1  A3  10 
A 1  A4  9 
B 5  B5  68 
B 5  B3  50 
B 5  B4  40 

我怎樣才能的願望輸出

+1

到目前爲止您嘗試過什麼? – ckruczek

+0

我試過一些Url [link1](http://stackoverflow.com/questions/2043259/sql-server-how-to-join-to-first-row) [link1](http://stackoverflow.com/questions/6841605/get-top-1-row-of-group) 但沒有成功 – Kaplesh

回答

1

可以使用Row Number。通過使用Row Number,您可以根據他們的SecondFrequency爲每行賦予相同的「單詞」數字。如果更改了「單詞」,這些號碼將被重置。

;with cte as 
(
    select *, ROW_NUMBER() OVER (PARTITION BY Word ORDER BY SecondFrequency DESC) AS RowNumber from table2 
) 
select A.Word, B.Frequency, A.SecondWord, A.SecondFrequency 
    from cte A left join table1 B 
     on A.Word = B.Word 
where A.RowNumber < 4 
2
Use ROWNUMBER function based on second frequency for get you required result: 

CREATE TABLE #Table1(Id TINYINT, Word VARCHAR(1),Frequency TINYINT) 
CREATE TABLE #Table2(Id TINYINT, Word VARCHAR(1),SecondWord 
VARCHAR(2),SecondFrequency TINYINT) 

INSERT INTO #Table1(Id, Word ,Frequency) 
SELECT 1,'A',1 UNION ALL 
SELECT 2,'B',5 

INSERT INTO #Table2(Id, Word ,SecondWord ,SecondFrequency) 
SELECT 1,'A','A1',1 UNION ALL   
SELECT 2,'A','A2',5 UNION ALL 
SELECT 3,'A','A3',10 UNION ALL 
SELECT 4,'A','A4',9 UNION ALL 
SELECT 5,'A','A5',20 UNION ALL 
SELECT 6,'B','B1',5 UNION ALL 
SELECT 7,'B','B2',8 UNION ALL 
SELECT 8,'B','B3',50 UNION ALL 
SELECT 9,'B','B4',40 UNION ALL 
SELECT 10,'B','B5',68 

SELECT * 
FROM 
(
    SELECT ROW_NUMBER() OVER(PARTITION BY #Table1.Word ORDER BY 
      SecondFrequency DESC) RNo ,#Table1.Word ,#Table1.Frequency, 
      SecondWord ,SecondFrequency 
    FROM #Table1 
    JOIN #Table2 ON #Table1.Word = #Table2.Word 
) A 
    WHERE RNo BETWEEN 1 AND 3 

+0

您的回答也是正確的,非常感謝。 – Kaplesh

0

內部加入Row_Number()將有助於在這種情況下!

CREATE TABLE #Table1 
(
    Id INT 
    ,Word VARCHAR(10) 
    ,Frequency INT 
) 

INSERT INTO #Table1 SELECT 1,'A',1 
UNION SELECT 2,'B',5 

CREATE TABLE #Table2 
(
    Id INT 
    ,Word VARCHAR(10) 
    ,SecondWord VARCHAR(10) 
    ,SecondFrequency INT 
) 

INSERT INTO #Table2 SELECT 
1,'A','A1',1 UNION ALL SELECT 
2,'A','A2',5 UNION ALL SELECT 
3,'A','A3',10 UNION ALL SELECT 
4,'A','A4',9 UNION ALL SELECT 
5,'A','A5',20 UNION ALL SELECT 
6,'B','B1',5 UNION ALL SELECT 
7,'B','B2',8 UNION ALL SELECT 
8,'B','B3',50 UNION ALL SELECT 
9,'B','B4',40 UNION ALL SELECT 
10,'B','B5',68 

SELECT * FROM #Table1 
SELECT * FROM #Table2 

SELECT X.Word,X.Frequency,X.SecondWord,X.SecondFrequency 
FROM 
(SELECT T1.Word,T1.Frequency,T2.SecondWord,T2.SecondFrequency,ROW_NUMBER() OVER(PARTITION BY T1.WORD ORDER BY T2.SecondFrequency desc) as RN 
FROM #Table1 T1 
JOIN #Table2 T2 
ON T1.Word = T2.Word 
) AS X 
WHERE X.RN<=3 
0
  1. 從TABLE_2獲得前3行
  2. 加入TABLE_1
  3. 語法是:ROW_NUMBER()OVER(PARTITION BY COL1 ORDER BY COL2)爲num COL1是列組和COL2是排序的列,num是要使用的分類號碼限制結果

    SELECT t2.Word, 
         t1.Frequency, 
         t2.SecondWord, 
         t2.SecondFrequency 
    FROM 
        (SELECT * 
        FROM 
        (SELECT Word, 
          SecondWord, 
          SecondFrequency, 
          ROW_NUMBER() over(PARTITION BY Word 
               ORDER BY SecondFrequency DESC) AS num 
         FROM Table_2) T 
        WHERE T.num <= 3) t2 
    JOIN Table_1 AS t1 ON t2.Word = t1.Word 
    ORDER BY t2.SecondFrequency DESC;