Sql server 选择DISTINCT CAST(大小写(当X为IN时)),然后选择1或0结束为位)作为INTO返回重复记录
我正在尝试选择过去1年半内任何时候都有糖尿病诊断代码的患者列表,并将1(患者确实有糖尿病诊断代码)或0(患者没有糖尿病诊断代码)返回到哈希表中供以后使用。我得到了我想要的1和0,但是对于许多患者,我同时返回1和0。我已经尽我所能尝试了故障排除,但未能为每个患者返回一个值。这是我一直在使用的查询Sql server 选择DISTINCT CAST(大小写(当X为IN时)),然后选择1或0结束为位)作为INTO返回重复记录,sql-server,Sql Server,我正在尝试选择过去1年半内任何时候都有糖尿病诊断代码的患者列表,并将1(患者确实有糖尿病诊断代码)或0(患者没有糖尿病诊断代码)返回到哈希表中供以后使用。我得到了我想要的1和0,但是对于许多患者,我同时返回1和0。我已经尽我所能尝试了故障排除,但未能为每个患者返回一个值。这是我一直在使用的查询 IF object_id('tempdb..#t4') IS NOT NULL DROP TABLE #t4 SELECT DISTINCT CAST( CASE
IF object_id('tempdb..#t4') IS NOT NULL DROP TABLE #t4
SELECT DISTINCT CAST(
CASE
WHEN (diag_code IN ('250.00','250.01','250.02','250.03','250.10','250.11',
'250.12','250.13','250.20','250.21','250.22','250.23','250.30','250.31',
'250.32','250.33','250.40','250.41','250.42','250.43','250.50','250.51',
'250.52','250.53','250.60','250.61','250.62','250.63','250.70','250.71',
'250.72','250.73','250.80','250.81','250.82','250.83','250.90','250.91',
'250.92','250.93','357.2','362.01','362.02','362.03','362.04','362.05',
'362.06','362.07','366.41','648.00','648.01','648.02','648.03','648.04',
'111552007','111558006','11530004','123763000','127013003','127014009',
'190321005','190328004','190330002','190331003','190336008','190353001',
'190361006','190368000','190369008','190371008','190372001','190383005',
'190389009','190390000','190392008','190406000','190407009','190410002',
'190411003','190412005','190416001','190417004','190418009','190419001',
'190422004','193184006','197605007','198609003','199223000','199227004',
'199229001','199230006','199231005','199234002','201250006','201251005',
'201252003','23045005','230572002','230577008','237599002','237600004',
'237601000','237604008','237613005','237618001','237619009','237627000',
'25907005','26298008','267379000','267380002','2751001','275918005','28032008',
'28453007','290002008','309426007','310387003','311366001','312912001','313435000',
'313436004','314537004','314771006','314772004','314893005','314902007','314903002',
'33559001','34140002','359611005','359638003','359642000','360546002','371087003',
'38542009','39058009','39181008','408539000','408540003','413183008','414890007',
'414906009','420414003','420422005','421750000','421847006','421895002','422183001',
'422228004','422275004','423263001','424736006','424989000','425159004','425442003',
'426705001','426875007','427089005','428896009','42954008','44054006','4627003',
'46635009','50620007','51002006','5368009','54181000','57886004','59079001','5969009',
'70694009','73211009','74263009','75524006','75682002','76751001','81531005','81830002',
'8801005','91352004','9859006','31','E10.36','E11.36','E11.9','E13','E13.32','E13.33',
'E13.34','E13.35','E13.43','O24.42'))
THEN 1
ELSE 0
END AS bit) as DM,
patientid
INTO #t4
FROM patient_diag
WHERE dateofservice >= CONVERT(DATETIME, '01-01-2014')
使用EXISTS
是否可以更好地解决这一问题?我也试过了,但很难得到想要的结果
这是不是使用EXISTS更好地解决的问题
对。如果患者同时拥有列表中的代码和列表中的代码,则您将同时获得1和0。EXISTS可以工作,但MAX可能更快:
SELECT MAX(CAST(
CASE
WHEN (diag_code IN ...
'E13.34','E13.35','E13.43','O24.42'))
THEN 1
ELSE 0
END AS bit)) as DM,
patientid
INTO #t4
FROM patient_diag
WHERE dateofservice >= CONVERT(DATETIME, '01-01-2014')
GROUP BY patientid
请注意,如果您将所有这些代码放在一个单独的表中,而不是在查询中硬编码,那么维护将更容易(性能可能更好)。或者,如果有主代码表,则可以添加查询使用的属性
这是不是使用EXISTS更好地解决的问题
对。如果患者同时拥有列表中的代码和列表中的代码,则您将同时获得1和0。EXISTS可以工作,但MAX可能更快:
SELECT MAX(CAST(
CASE
WHEN (diag_code IN ...
'E13.34','E13.35','E13.43','O24.42'))
THEN 1
ELSE 0
END AS bit)) as DM,
patientid
INTO #t4
FROM patient_diag
WHERE dateofservice >= CONVERT(DATETIME, '01-01-2014')
GROUP BY patientid
请注意,如果您将所有这些代码放在一个单独的表中,而不是在查询中硬编码,那么维护将更容易(性能可能更好)。或者,如果有主代码表,您可以添加查询使用的属性。谢谢您的回复!必须将
END AS bit
更改为END AS int
,然后我就可以走了@涂鸦很好。如果你想输出一点值,你也可以在最大值之后进行转换,但是使用任何适合你的方法。谢谢你的回复!必须将END AS bit
更改为END AS int
,然后我就可以走了@涂鸦很好。如果您想将值作为一个位输出,也可以在最大值之后进行强制转换,但使用适合您的任何方法。