T-SQL查询用不同的场景编写case语句

时间:2017-12-04 18:22:53

标签: sql-server tsql

我有2个表测试表和调查表。 测试表有

ChildID AddressID TestID TestValue  TestDate
1        1          1       20      08/04/2017
2        2          2       20      09/04/2017
2        2          3       10      10/04/2017

当孩子的测试值> = 20时,系统会自动生成调查地址,但在15到19.9之间无法打开

调查表

ChildID InvestID AddressID Status
1         1         1       open
2         2         2       open

如果我得到一个新的儿童身份传入测试记录,这就是我的表格看起来

ChildID AddressID TestID TestValue  TestDate
1        1          1       20      08/04/2017
1        5          4       16      12/04/2017(New record)
2        2          2       20      09/04/2017
2        2          3       10      10/04/2017
2        3          5       19      12/04/2017(New Record)

场景1 我想选择新记录并将'status'(新列)显示为'新地址'的情况,其中Test值介于15和19.9之间,测试日期相隔90天且地址id不等于两个测试。如果地址相同,请勿选择任何记录。 场景2 如果孩子的第二个测试值在15到19.9之间且具有相同的addess id

ChildID AddressID TestID TestValue  TestDate
3        6          10       16      08/04/2017
3        6          20       18      11/04/2017 (New Record)

选择状态为“新案例和新地址”的新记录

场景3

ChildID AddressID TestID TestValue  TestDate
3        6          10       16      08/04/2017
3        6          20       18      11/04/2017 
3        7          21       17      02/04/2018 (New record)

将最新记录状态显示为“新地址”,因为它具有不同的地址。 到目前为止,我已经编写了查询,但我无法比较“状态列”的记录和写案例语句。我只能选择记录。

Select childid,Testid,TestDate,
TestValue,addressid,lc.caseType,
DateDiff(Day,lead(Test) OVER (Partition by Childid order by TestDate desc),Testdate) as Datediff,
DateDiff(day,First_Value(Testdate) Over (Partition by Childid  order by b2.Testdateasc),Testdate) as Datedif1 
from Test T
Left Join Investigation  I
            on T.child=I.childid
and b.observationValue between 15 and 19.99
and  Datedif1>=90 or Datediff>=90

0 个答案:

没有答案