如何将每一行重复两次
Posted
技术标签:
【中文标题】如何将每一行重复两次【英文标题】:how to repeat each row twice 【发布时间】:2014-11-03 15:18:37 【问题描述】:我需要一份报告,我希望我的 sql 查询将每一行重复两次。
例子:
**Table 1**
Id Name
1 Ab
2 Cd
3 Ef
我想编写一个查询,输出以下内容:
1 Ab
1 Ab
2 Cd
2 Cd
3 Ef
3 Ef
有什么办法可以做到吗?
除了union
,我什么都想不出来
Select Id, name from Table1 union select Id, name from Table1
【问题讨论】:
【参考方案1】:您可以使用union all
。 union
不起作用,因为它会消除重复项。另一种方式是cross join
:
select id, name
from table1 t1 cross join
(select 1 as n union all select 2) n;
【讨论】:
+1 表示交叉连接。使用任何类型的联合解决方案,您都必须两次维护对查询的任何更改。 或者更简洁的版本select id, name from table1 CROSS APPLY (VALUES(1),(2)) V(n)
您能否非常友好地澄清以下行 (select 1 as n union all select 2) n
的含义?特别是select 1 and select 2
.
@StepUp 。 . .这将创建一个包含两行一列的派生表。在一行中,列的值为“1”。另一个是“2”。
@GordonLinoff 但是输出应该是1 Ab 1 1 Ab 2 2 Cd 1 2 Cd 2 3 Ef 1 3 Ef 2
。 UNION ALL
如何使秒行与前一行相同。我只是拉着头。提前致谢。【参考方案2】:
解决办法是这样的:
select Id, name from Table1
union all
select Id, name from Table1
【讨论】:
【参考方案3】:您也可以使用UNION ALL
,将它们放在CTE
(公用表表达式)和Order By Id
下:
WITH CTE AS
(
SELECT Id, Name FROM Table_1
UNION ALL
SELECT Id, Name FROM Table_1
)
SELECT Id, Name
FROM CTE
ORDER BY Id;
因为这会将它们重新排序并将它们堆叠作为重复项
【讨论】:
以上是关于如何将每一行重复两次的主要内容,如果未能解决你的问题,请参考以下文章