0

我在应用程序中有一个字段,允许用户选择多个值。当我在数据库中查询此字段时,如果选择了多个值,则结果将显示为一个长字。多个选定值之间没有逗号或空格。有什么办法可以用逗号分隔这些值?这是我的查询:

SELECT      HO.Value

FROM HAssessment ha 
INNER JOIN HObservation HO       
ON HO.AssessmentiD      = ha.AssessmentID
AND HO.Patient_Oid      = 2255231
WHERE Ho.FindingAbbr = 'A_R_CardHx'

------------------------------------------------
Result:
AnginaArrhythmiaCADCChest Pain
-------------------------
I would like to see:
Angina, Arrhythmia, CADC, Chest Pain
------------------------------------------

帮助!

4

1 回答 1

0

对此没有简单的解决方案。

最方便的方法是编写一个字符串拆分函数。从您的示例数据来看,这些值似乎都连接在一起而没有任何分隔符。这意味着您必须提出所有可能值的列表(希望这是来自某些症状表的查询......)并从字符串中解析出每个值。这将是复杂而痛苦的。

一种直接的方法是测试每个有效的症状值以查看它是否包含在 中HObservation.Value,将所有找到的值组合在一起,然后返回结果。请注意,这将执行得很差。

这是 TSQL 中的一个示例。不过,在应用程序层执行此操作会更好,或者更好的是,规范化您的数据库(有关更多信息,请参见下文)。

declare @symptoms table (symptom varchar(100))
insert into @symptoms (symptom)
values ('Angina'),('Arrhythmia'),('CADC'),('Chest Pain')

declare @value varchar(100)
set @value = 'AnginaArrhythmiaCADCChest Pain'

declare @result varchar(100)
select @result = stuff((
SELECT ', ' + s.symptom
FROM @symptoms s
WHERE patindex('%' + s.symptom + '%',@value) > 0
FOR XML PATH('')),1,1,'')

select @result

真正的答案是重组你的数据库。HObservation.Value如果这样的表不存在,则将在其中找到的每个不同项目(这意味着心绞痛、心律失常等作为单独的行)放入其他表中。我将此表称为症状。然后创建一个查找表以链接HObservationSymptom. 然后完全删除该HObservation.Value列。在应用程序级别进行拆分工作,并在查找表中进行多次插入。

示例,基于您问题的示例数据:

HObservation
------------
ID Value
1  AnginaArrhythmiaCADC

变成:

HObservation
------------
ID 
1  

Symptom
-------
ID Value
1  Angina
2  Arrhythmia
3  CADC

HObservationSymptom
-------------------
ID HObservationID SymptomID
1  1              1
1  1              2
1  1              3

请注意,如果这是一个生产系统(或者您出于其他原因想要保留现有数据),您仍然需要编写代码来进行字符串拆分。

于 2012-12-05T17:23:20.067 回答