我在应用程序中有一个字段,允许用户选择多个值。当我在DB中查询此字段时,如果选择了多个值,则结果将显示为一个长字。多个选定值之间没有逗号或空格。这些值是否可以用逗号分隔? 这是我的疑问:
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
------------------------------------------
帮助!
答案 0 :(得分: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
中的每个不同项目(这意味着心绞痛,心律失常等作为单独的行)放入其他表中。我将此表称为症状。然后创建一个查找表,将HObservation
与Symptom
相关联。然后完全删除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
请注意,如果这是一个生产系统(或者您想因某些其他原因保留现有数据),您仍然需要编写代码来进行字符串拆分。