我对 MS SQL Server 很陌生(我一直使用 SAS 拉)。
我有一个程序可以识别在特定月份没有见过的孩子 - 标准在下面以粗体显示。当我运行程序时,这是一个结果示例:
五月未见的孩子:
Person_ID Child_Name Case_ID Stage_ID Unit Worker_Name
37938354 Chrismary 25367048 28714173 P5G Edith
37938357 Michael 25367048 28714173 P5G Edith
29174158 Bryan 22229090 24456882 P5J Elizabeth
22426348 Juan 24621782 27258653 P5C Dalbin
37046338 Nathaniel 25154727 28232513 P5A Vontaisha
38593370 Natalia 25154727 28232513 P5A Vontaisha
36266293 Luzarely 25020393 27989836 P5C Dalbin
35745702 Taneesa 24716363 27417204 P5E Kathleen
28044496 Braulio 24926432 27909182 P5E Elizabeth
我需要做的是根据我运行程序的月份添加 5 个额外的月份列,这将指示孩子是否在过去 5 个月内没有看到,值为“YES”、“NO”和“N/A” '。N/A 是当孩子不包括在特定月份的数据集中时。
我需要的示例:
Person_ID Child_Name Case_ID Stage_ID Unit Worker_Name Seen_April Seen_March
37938354 Chrismary 25367048 28714173 P5G Edith YES YES
37938357 Michael 25367048 28714173 P5G Edith NO YES
29174158 Bryan 22229090 24456882 P5J Elizabeth NO NO
22426348 Juan 24621782 27258653 P5C Dalbin YES YES
37046338 Nathaniel 25154727 28232513 P5A Vontaisha N/A N/A
38593370 Natalia 25154727 28232513 P5A Vontaisha YES YES
36266293 Luzarely 25020393 27989836 P5C Dalbin YES YES
35745702 Taneesa 24716363 27417204 P5E Kathleen YES NO
28044496 Braulio 24926432 27909182 P5E Elizabeth YES No
...并持续到 2 月、1 月、12 月。
在 SAS 中,我可以使用 Do Loop 来解决这个问题,但不知道如何使用 MS SQL Sever 来做到这一点。
您还会注意到我不得不对日期标准进行硬编码。在 SAS 中,我可以使用宏变量来选择日期示例:%let BegDate='2013-05-01' 和 %Let EndDate='2013-05-31'。是否可以在 MS SQL 服务器中创建宏变量?
这是程序:
SELECT
distinct
a.Person_ID,
a.Child_Name,
b.Case_ID,
b.Stage_ID,
b.Unit,
b.Worker_Name
from
(select
distinct
Person_ID,
Child_Name
FROM gw_dw.dbo.DimContacts_Child
where Unit in ('P5C','P4C','P5L','P5D','P5F','P5G','P5E','P5A','P5K','P5J')
and (**Contact_Date >= '2013-05-01' AND Contact_Date <='2013-05-31**')
group by Person_ID,Child_Name
having sum(case when (Contact_Method='Face To Face') AND
(Contact_Result <> 'Attempted') AND
(Participant='Yes')
then 1 else 0 end) = 0 ) as A
inner join
(Select distinct --Addtional Query Beacuse there multipal units assigned to a child*/
Person_ID,
Case_ID,
Stage_ID,
Unit,
Worker_Name
from gw_dw.dbo.DimContacts_Child
where Unit in ('P5C','P4C','P5L','P5D','P5F','P5G','P5E','P5A','P5K','P5J')
and (**Contact_Date >= '2013-05-01' AND Contact_Date <='2013-05-31'**)
group by Worker_Name,Unit,Person_ID,Case_ID,Stage_ID
having sum(case when (Contact_Method='Face To Face') AND
(Contact_Result <> 'Attempted') AND
(Participant='Yes')
then 1 else 0 end) = 0 ) as B
on A.Person_ID = B.Person_ID
order by a.Child_Name;
任何帮助表示赞赏。谢谢!