SQL Server根据值重复行数

时间:2018-11-30 09:42:26

标签: sql sql-server

我有一条具有以下结构的记录,

Item      ActiveFrom         ActiveTo
 A        1/01/2015           25/12/2018

我有一个Year条件为Where的条件。因此,每当我应用年份值时,都应获取该年份的有效记录。

我做了ablove结构

Select Item,YEAR(ActiveFrom) From Test
UNION 
Select Item,YEAR(ActiveTo) From Test

所以我得到了以下两个订单项,

Item    Year
A        2015
A        2018

现在,当我在2017年的条款中应用该记录时,此记录未获取,因此我需要如下输出,

Item    Year
A        2015
A        2016
A        2017
A        2018

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

加入日历表:

WITH years AS (
    SELECT 2015 AS year UNION ALL
    SELECT 2016 UNION ALL
    SELECT 2017 UNION ALL
    SELECT 2018
)

SELECT
    t.Item,
    c.year
FROM years c
INNER JOIN Test t
    ON c.year BETWEEN YEAR(t.ActiveFrom) AND YEAR(t.ActiveTo);