在 SQL Server 视图中插入重复行
Posted
技术标签:
【中文标题】在 SQL Server 视图中插入重复行【英文标题】:Insert duplicate row in SQL Server view 【发布时间】:2018-07-10 06:29:11 【问题描述】:我想知道是否可以在 SQL Server 2008 R2 中创建仅包含最后一列 (DateTime DESC) 的视图,但应将最后一行再次复制到视图中。
所以最终结果将是一个包含两行数据相同的视图。
选择一行的查询很简单:
SELECT TOP 1 *
FROM Reporting
ORDER BY DateTime DESC
或
SELECT TOP 1 *
FROM Reporting
WHERE DateTime IN (SELECT MAX(DateTime)
FROM Reporting)
这只会返回一行,但我想在视图中再次复制这一行。
谢谢
【问题讨论】:
【参考方案1】:上述答案中的语法无效。 UNION ALL
中的每个数据源中都不允许有ORDER BY
。在最后的陈述中你只能有一个。所以,这是错误的:
SELECT TOP 1 * FROM Reporting ORDER BY DateTime DESC
UNION ALL
SELECT TOP 1 * FROM Reporting ORDER BY DateTime DESC
并且应该这样做:
SELECT * FROM (SELECT TOP 1 * FROM Reporting ORDER BY DateTime DESC)
UNION ALL
SELECT * FROM (SELECT TOP 1 * FROM Reporting ORDER BY DateTime DESC);
我会建议使用不同的方法。使用假数据源,然后cross apply
。
SELECT SI.*
FROM
(
SELECT 1
UNION ALL
SELECT 2
) DS ([col])
CROSS APPLY
(
SELECT TOP 1 * FROM Reporting ORDER BY DateTime DESC
) SI;
您可以轻松测试该语句的执行计划是否更好,仅导致一次排序和索引扫描:
【讨论】:
【参考方案2】:尝试联合所有:
SELECT TOP 1 * FROM Reporting ORDER BY DateTime DESC
UNION ALL
SELECT TOP 1 * FROM Reporting ORDER BY DateTime DESC
【讨论】:
是的,我应该想到这一点,谢谢。我会尽快接受答案(必须等待 7 分钟) 这不是有效的语法。 gotqn 是正确的,我推荐他的解决方案,在性能方面也是 我必须同意@gotqn 这不是在视图中使用的有效语法。对不起以上是关于在 SQL Server 视图中插入重复行的主要内容,如果未能解决你的问题,请参考以下文章
从 excel 导入数据时防止 SQL Server 2008 中的行重复