将名称与列表中的SSN匹配

时间:2019-09-18 20:19:18

标签: sql sql-server

预先感谢您可能提出的任何建议。

这是我第一次尝试从列式数据库中查询,因此我不确定如何编写查询以提供所需的结果。

我要查询的表(“ census_data”)具有以下类型的值(总共41行):

plan_id ssn_key        field    value
1       111111111      DOB      1732-02-22
1       111111111      DOR      1830-11-02
1       111111111      FNAME    GEORGE
1       111111111      LNAME    WASHINGTON
1       863283322      DOR      2020-03-22

作为一个FYI,在某些情况下,我们可能只有某人的SSN和DOB,而没有他们的FNAME,LNAME,DOR(退休日期)等。

我们现在正在使用虚拟数据,并尝试在开始使用大型数据集时进行查询。

我们知道,在某些情况下,实际数据集中会存在一些不合逻辑的数据,例如将来发生的退休日期('DOR')(假设我们的规则为“ DOR”值才能使其生效)。

我们编写了一些查询,这些查询为我们提供了我们想要的结果,例如:

1)给我们所有人FNAME ='GEORGE'和LNAME ='WASHINGTON'的生日

select [value] from [testdb3].[dbo].[census_data]
where ssn_key in (select ssn_key from census_data where field='LNAME' 
and value='WASHINGTON' and ssn_key in
(select ssn_key from census_data where field='FNAME' 
and [value]='GEORGE')) AND field='DOB' 

2)给我们所有具有退休日期的人,在今天之后

select [plan_id], [ssn_key], [field], [value] 
from [testdb3].[dbo].[census_data] as 
cd where cd.field = 'DOR'and value > GETDATE()

提醒一下,SSN值位于表的第二列,而DOB,FNAME,DOR,LNAME等的值均位于表的第四列。

这是我们的绊脚石。我们正在尝试编写一个查询,为我们提供退休日期大于今天的任何人的名字。我们花了几个小时来尝试一些可行的方法,但到目前为止却是空的。如果有人对代码是什么有任何想法,请告诉我,我将不胜感激。谢谢。

0 个答案:

没有答案