0

アプリケーションに、ユーザーが複数の値を選択できるフィールドがあります。DB でこのフィールドを照会すると、複数の値が選択されている場合、結果は 1 つの長い単語として表示されます。選択した複数の値の間にコンマやスペースはありません。これらの値をコンマで区切る方法はありますか? これが私のクエリです:

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(狭心症、不整脈などを別の行として意味する) を別のテーブルに配置します (そのようなテーブルがまだ存在しない場合)。この表を症状と呼びます。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

これが本番システムである場合 (または他の理由で既存のデータを保持したい場合) は、文字列分割を行うコードを記述する必要があることに注意してください。

于 2012-12-05T17:23:20.067 に答える