【问题标题】:select contents from one table using another table使用另一个表从一个表中选择内容
【发布时间】:2021-07-09 03:12:46
【问题描述】:

我有两张桌子

A1 A2
a 2
b 3
A3 A4
a row1
a row 2
a row 3
a row 4
b row 5
b row 6
b row 7
b row 8
b row 9

我想要类似的东西

A3 A4
a row1
a row 2
b row 5
b row 6
b row 7

第一个表中的第二列应该是我想要下一个表中每个组的记录数 我试过在哪里存在它不起作用你能帮帮我吗?!?

【问题讨论】:

    标签: sql tsql select subquery


    【解决方案1】:

    我会在第二张桌子上使用ROW_NUMBER。然后加入第一个表,只保留行号不超过生成的行号值的记录。

    WITH cte AS (
        SELECT *, ROW_NUMBER() OVER (PARTITION BY A3 ORDER BY A4) rn
        FROM Table2
    )
    
    SELECT t2.A3, t2.A4
    FROM cte t2
    INNER JOIN Table1 t1
        ON t2.A3 = t1.A1
    WHERE
        t2.rn <= t1.A2;
    

    Demo

    请注意,最好在第二个表中有一个更合适的序列列来确定在那里选择记录的顺序。

    【讨论】:

      【解决方案2】:
       declare @temp1 as table(A1 varchar(1),A2 varchar(1))
       declare @temp2 as table(A3 varchar(1),A4 varchar(10));
      
       insert into @temp1(A1,A2) values('a',2),('b',3)
       insert into @temp2(A3,A4) values('a','row 1'),
       ('a',  'row 2'),
       ('a',  'row 3'),
       ('a',  'row 4'),
       ('b',  'row 5'),
       ('b',  'row 6'),
       ('b',  'row 7'),
       ('b',  'row 8'),
       ('b',  'row 9')
      
       select A1,A4 
       from
       (
       select 
       tmp1.A1,tmp1.A2,tmp2.A4,
       Row_Number() over(partition by tmp1.A1 order by tmp1.A1) RowID
       from @temp1 tmp1
       join @temp2 tmp2 on
          tmp1.A1=tmp2.A3
       )x
       where RowID<=A2
      

      输出:

      A1  A4
      a   row 1
      a   row 2
      b   row 5
      b   row 6
      b   row 7
      

      【讨论】:

        猜你喜欢
        • 2019-05-04
        • 2015-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-08
        • 2020-08-17
        • 1970-01-01
        相关资源
        最近更新 更多