select 一个 table 的内容使用另一个 table
select contents from one table using another table
我有两个table
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
第一个table中的第二列应该是下一个table中每个组中我想要的记录数
我试过哪里有问题,你能帮帮我吗?!?
我会在第二个 table 上使用 ROW_NUMBER
。然后加入第一个table,只保留行号不超过生成行号值的记录。
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;
请注意,最好在第二个 table 中有一个更合适的序列列,它决定了在那里选择记录的顺序。
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
我有两个table
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 |
第一个table中的第二列应该是下一个table中每个组中我想要的记录数 我试过哪里有问题,你能帮帮我吗?!?
我会在第二个 table 上使用 ROW_NUMBER
。然后加入第一个table,只保留行号不超过生成行号值的记录。
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;
请注意,最好在第二个 table 中有一个更合适的序列列,它决定了在那里选择记录的顺序。
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