sql - sql 中前 10 行的复杂连接

标签 sql sql-server join

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

所需的输出 “Table2”中的前 3 条记录,按 SecondFrequency 描述排序 例如。

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

如何获得所需的输出

最佳答案

  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 

关于sql - sql 中前 10 行的复杂连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42641631/

相关文章:

sql - MySQL:为表中的每个不同值在外表中的每个键插入一行

php - SQL 帮助 - 新手

mySQL 如何在使用多个联接时通过特定 id 限制查询

Oracle:从 SELECT...JOIN 中插入值,SQL 错误:ORA-00947:没有足够的值

sql - 将文件插入 Postgres 数据库

MySQL 插入语句双条目

sql - 如何重置Sql Server 2008数据库?

sql - 序列与同一性

sql - 如何将 T-SQL 查询转换为存储过程?

PHP/MySQL 连接语法 : Comparing Two Columns in Separate Tables