在SQL Server 2012中构造分组列

时间:2016-09-23 04:26:48

标签: sql sql-server-2012-express

我创建了一个看起来像这样的表:

ID   TSPPLY_DT    NEXT_DT     DAYS_BTWN   TIME_TO_EVENT   CENSORED   ENDPOINT
-----------------------------------------------------------------------------
1    2014-01-01   2014-01-10      10            10             0          0 
1    2014-01-10   2014-01-21      11            21             0          0 
1    2014-01-21     NULL         NULL           21             1          0     
2    2015-04-01   2015-04-30      30            30             0          0
2    2015-04-30   2015-05-03       1            31             0          1
2    2015-05-03   2015-05-06       3            34(should be 3)0          0
2    2015-05-06   2015-05-16      10            44(shouldbe 13)1          0

TIME_TO_EVENT列无法正确添加我的代码 - 我们的想法是将ID更改,CENSORED = 1或{{1}之间的天数相加} = 1。

我认为我需要的是一个添加列,我可以根据ENDPOINTID的总和加总... ...输出如下:

GROUPING

关于如何创建ID TSPPLY_DT NEXT_DT DAYS_BTWN TIME_TO_EVENT CENSORED ENDPOINT GROUPING ---------------------------------------------------------------------------------------- 1 2014-01-01 2014-01-10 10 10 0 0 A 1 2014-01-10 2014-01-21 11 21 0 0 A 1 2014-01-21 NULL NULL 21 1 0 A 2 2015-04-01 2015-04-30 30 30 0 0 A 2 2015-04-30 2015-05-03 1 31 0 1 A 2 2015-05-03 2015-05-06 3 3 0 0 B 2 2015-05-06 2015-05-16 10 13 1 0 B 列的任何想法?这将是IF,下一行GROUPING与当前行相同,请检查IDCENSORED。如果其中一个= 1,则对于下一行,将分组更改为新值。达到新的ENDPOINT后,将ID重置为A(或任意值)并再次运行测试。

1 个答案:

答案 0 :(得分:0)

您需要使用DATEDIFF功能,如下所示:

DATEDIFF(d, TSPPLY_DT, NEXT_DT) AS DAYS_BTWN

现在您不需要GROUP BY