0

私は SQL Server 2008 にかなり慣れていないので、問題に遭遇しました。ラボの結果を含む varchar(255) 列を含むテーブルがあります。列のデータは次のようになります。

result_value
7.0
162
NEGATIVE
SEE NOTE
9.6

今、私がやろうとしているのは、次のクエリを実行することです。

;WITH PatientData (patient_id,last_name, first_name, ethnic_group,
race, icdcode, encounter_date, test_performed, result_value,
result_units )
AS
(
SELECT pat.patient_id, pat.last_name, Pat.first_name, pat.ethnic_group,
pat.race, pl.icdcode, enc.encounter_date, lab.test_performed, lab.result_value,
lab.result_units
FROM dbo.dem_patient pat
RIGHT JOIN dbo.med_problemlist as pl
ON pat.patient_id = pl.patient_id
JOIN dbo.enc_encounter as enc
ON pat.patient_id = enc.patient_id
JOIN dbo.med_labresult as lab
ON pat.patient_id = lab.patient_id
WHERE pl.icdcode like '250%' AND
enc.encounter_date >= '01/01/2012' AND enc.encounter_date <= '12/31/2012' AND
pat.last_name != 'test' AND (lab.test_performed = 'HgbA1c' OR 
lab.test_performed = 'Hemoglobin A1c')
GROUP BY pat.patient_id, pat.last_name, Pat.first_name, pat.ethnic_group,
pat.race, pl.icdcode, enc.encounter_date, lab.test_performed, lab.result_value,
lab.result_units
)
select sum(case when result_value < 7.0 then 1 else 0 end) as [LessThan7%],
       sum(case when result_value >= 7.0 and result_value < 8.0 then 1 else 0 end) as [7%to8%],
       sum(case when result_value >= 8.0 and result_value < 9.0 then 1 else 0 end) as [8%to9%],
       sum(case when result_value >= 9.0 then 1 else 0 end) as [GreaterThan9%]
FROM PatientData pd1 
WHERE EXISTS (SELECT patient_id 
                FROM PatientData pd2 
                WHERE pd2.patient_id  = pd1.patient_id  
                GROUP BY patient_id 
                HAVING COUNT(*)>1 )

A1c テストを実行した患者のみを返す必要があるため、results_value 列は常に xx のようになりますが、このクエリを実行しようとすると、「varchar をデータ型数値に変換中に算術オーバーフロー エラーが発生しました。

これらの異なるタイプのデータを同じ列にまとめるのは理想的ではないことはわかっていますが、データベースを作成したのではなく、使用する必要があるだけです。とにかくこの問題の周りにありますか?

ご協力ありがとうございました。

4

1 に答える 1