【问题标题】:SQL to repeat rows from a specific year to current yearSQL 将行从特定年份重复到当前年份
【发布时间】:2019-08-10 04:06:51
【问题描述】:

我有一张下表,

Code    Desc    Curr_Year
-------------------------
AB      XYZ     2019

我正在寻找一个从 1993 年到 2019 年重复同一行的 SQL 查询。

输出应如下所示:

Code    Desc    Curr_Year Inc_Yr
---------------------------------
AB      XYZ     2019      1993
AB      XYZ     2019      1994
AB      XYZ     2019      1995
AB      XYZ     2019      1996
.       .       .         .
.       .       .         .

AB      XYZ     2019      2019

我使用的是 SQL Server 2012。

我不是 SQL 专家,我真的很难完成这项工作。

任何帮助将不胜感激。

【问题讨论】:

  • 写一个递归 cte 来返回想要的年份。交叉连接。

标签: sql sql-server-2012


【解决方案1】:

我会这样做:

SELECT Code
      ,Desc
      ,Curr_Year 
      ,g.num as Inc_Yr
  FROM yourtable A
  CROSS JOIN (SELECT TOP 26 1992+ ROW_NUMBER() OVER (ORDER BY [object_id]) as num FROM sys.all_objects) g

首先生成您需要的所有年份的值列表,然后是一个简单的CROSS JOIN

如果不允许您使用表sys.all_objects,您仍然可以使用值列表。看看这个问题的第二个答案:

How can I select from list of values in SQL Server

【讨论】:

  • 感谢 Esteban 的及时回复。但是有没有一种方法可以在仅“选择”语句中实现,而无需声明任何变量,因为我必须在应用程序中使用查询。
  • 您始终可以在应用程序中使用参数化查询。
  • 我正在使用 SAP 报告应用程序,它只接受徒手 sql(仅选择语句)。
  • @Aniket 我刚刚更新了我对没有 CTE 的解决方案的回答
  • 那是伟大的埃斯特班。非常感谢。它确实解决了我的问题:)
【解决方案2】:

SQL DEMO

;WITH Years AS
(
  SELECT Inc_Yr = ROW_NUMBER() OVER (ORDER BY [object_id]) 
  FROM sys.all_objects     
)
SELECT Table1.*, Inc_Yr 
FROM Years 
CROSS JOIN Table1
WHERE Inc_Yr BETWEEN 1993  AND 2019
ORDER BY Inc_Yr;

【讨论】:

    猜你喜欢
    • 2022-12-30
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多