【问题标题】:Getting value repeated for next year if value is recurring如果价值反复出现,则为明年重复价值
【发布时间】:2016-11-30 01:27:50
【问题描述】:

我有项目和版本号的记录,如果价值重复出现,我需要在明年重复该行。 第一张图片显示了我拥有的数据

我的预期输出是:

输出说明:在 2017 年 value_type ITA 的频率为 Recurring 因此,该值应在所有明年(即 2018 年、2019 年和 2020 年)中重复。就像 2018 年 OC 和 PA 一样,它会在 2019 年和 2020 年重复。

为此,我为重复值创建了一个新视图,并尝试将该视图与基表连接起来。但这并没有给我正确的结果。

谁能帮我解决这个问题?

提前谢谢..

【问题讨论】:

  • 其他列 (RUN_RATE) 怎么样?他们重复吗?你会让它永远重复吗?
  • 它停在哪里?最好有一个 Repeat_Until 字段,其中包含重复结束的年份。
  • 只有重复值行才会重复...@DVT
  • 它将停止在最大(年)......在我的项目中,最大年份是 2020 年,然后它将显示到 2020 年的记录.....@mendosi

标签: sql sql-server sql-server-2012


【解决方案1】:
    DECLARE @EndYear INT =2020 --Also you can get from data by MAX(Year)
    ;WITH tb(PROJECT_ID,RELEASE_NO,[YEAR],VALUE_TYPE,VAL_DES,COST,RUN_TATE,FREQUENCY)
    AS(
       SELECT 111,1,2016,'IT','EXPENSE',0,NULL,NULL UNION
       SELECT 111,1,2016,'IR','INCOME',10000,NULL,NULL UNION
       SELECT 111,1,2016,'OC','EXPENSE',-200000,NULL,NULL UNION
       SELECT 111,1,2016,'Vendor','EXPENSE',-5000,NULL,NULL UNION
       SELECT 111,1,2017,'BC','INCOME',200000,NULL,NULL UNION
       SELECT 111,1,2017,'ITA','INCOME',5000,5000,'Recurring' UNION
       SELECT 111,1,2017,'OC','EXPENSE',-200000,NULL,NULL UNION
       SELECT 111,1,2018,'OC','EXPENSE',-10000,-10000,'Recurring' UNION
       SELECT 111,1,2018,'PA','INCOME',100000,100000,'Recurring' UNION
       SELECT 111,1,2019,'icc','INCOME',500,NULL,NULL UNION
       SELECT 111,1,2020,NULL,NULL,NULL,NULL,NULL 
    ),Recurring AS (
       SELECT tb.PROJECT_ID,tb.RELEASE_NO,tb.VALUE_TYPE,tb.VAL_DES,MIN([YEAR]) AS StartYear,MAX(COST) AS COST,MAX(tb.RUN_TATE) AS RUN_TATE
       FROM tb WHERE FREQUENCY='Recurring' 
       GROUP BY tb.PROJECT_ID,tb.RELEASE_NO,tb.VALUE_TYPE,tb.VAL_DES
    )
    SELECT * FROM tb union
    SELECT r.PROJECT_ID,r.RELEASE_NO,n.number AS [YEAR],r.VALUE_TYPE,r.VAL_DES,r.COST,r.RUN_TATE,NULL AS FREQUENCY FROM 
    Recurring AS r 
    OUTER  APPLY (
       SELECT sv.number FROM master.dbo.spt_values AS sv WHERE sv.type='P' AND sv.number BETWEEN r.StartYear+1 AND @EndYear
    )n
PROJECT_ID RELEASE_NO YEAR VALUE_TYPE VAL_DES COST RUN_TATE FREQUENCY ----------- ------------ ----------- ---------- ------- ------------ ------------ --------- 111 1 2016 IR 收入 10000 NULL NULL 111 1 2016 IT 费用 0 NULL NULL 111 1 2016 OC 费用 -200000 NULL NULL 111 1 2016 供应商费用 -5000 NULL NULL 111 1 2017 BC 收入 200000 NULL NULL 111 1 2017 ITA 收入 5000 5000 经常性 111 1 2017 OC 费用 -200000 NULL NULL 111 1 2018 ITA 收入 5000 5000 空 111 1 2018 OC 费用 -10000 -10000 经常性 111 1 2018 PA 收入 100000 100000 经常性 111 1 2019 icc 收入 500 NULL NULL 111 1 2019 ITA 收入 5000 5000 空 111 1 2019 OC 费用 -10000 -10000 NULL 111 1 2019 PA 收入 100000 100000 NULL 111 1 2020 无 无 无 无 无 无 111 1 2020 ITA 收入 5000 5000 空 111 1 2020 OC 费用 -10000 -10000 NULL 111 1 2020 PA 收入 100000 100000 NULL

【讨论】:

  • 非常感谢@Nolan Shang
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-26
  • 2012-12-04
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 2019-09-21
  • 1970-01-01
相关资源
最近更新 更多