2017-09-28 9 views
0

昨日から、この要求に固執していますので、hs.HOSPITALIZESPECIALTYIDが3または4のときにエラーが返されます。ただし、フィールドが1または2できます。SQL Server:サブクエリが1つ以上の値を返した 'In'を使用した場合

hs.HOSPITALIZESPECIALTYID = 1 ====> su.UNITKEY equals 3 or 4 
hs.HOSPITALIZESPECIALTYID = 2 ====> su.UNITKEY equals 9 or 10 
hs.HOSPITALIZESPECIALTYID = 3 ====> su.UNITKEY equals 12 
hs.HOSPITALIZESPECIALTYID = 4 ====> su.UNITKEY equals 13 or 14 

そして、ここでエラーです:あなたの助け

select c.[HISTORYNUMBER] 
     ,c.[NAMECUSTOMER] 
     ,c.[FIRSTSURNAMECUSTOMER] 
     --,c.[SECONDSURNAMECUSTOMER] 
     ,ts.DESCRIPTION as Genre 
     ,convert(date,c.[DATEBIRTH],103) as 'Date de naissance' 
     ,c.[ADDRESS] 
     ,a.[ENTITY] 
     ,s.SPECIALTYDESCRIPTION 
     ,su.DESCRIPTION as Unité 
     ,hs.HOSPITALIZATIONDATE 
    ,hs.OUTPUTDATE 
    ,hs.MOVEMSPECIALITYID 
     from HealthcareProcs..HospProcess hs 
inner join PatientManagement..Customer c 
on c.CUSTOMERID = hs.CUSTOMERID 
inner join Configuration..agreement a 
on hs.AGREEMENTID = a.[KEY] 
inner join Configuration..specialty s 
on s.[KEY] = hs.HOSPITALIZESPECIALTYID 
left join configuration..SpecialtyUnits su 
on su.SPECIALTY = s.[KEY] 
inner join Configuration..Hospitalspecialty hsp 
on hsp.SPECIALITYID = s.[KEY] 
inner join configuration..tables ts 
on ts.[KEY] = c.GENDER 
and ts.[TABLE] = 'EstGenero' 

where hs.outputdate is null 
and hs.HOSPITALIZESPECIALTYID in (3) 
and hs.ENTRYID is not null 
--and hospitalizationdate >= @datedebut + ' 00:00:00' 
--and hospitalizationdate <= @datefin+ ' 23:59:59' 
--and hsp.HEALTHCENTREID = @centre 
and su.UNITKEY in (12) 

and c.GENDER in (case 
       when (su.UNITKEY = 4 or su.UNITKEY = 10) and (hs.HOSPITALIZESPECIALTYID = 1 or hs.HOSPITALIZESPECIALTYID = 2) then 0 
       when (su.UNITKEY = 3 or su.UNITKEY = 9) and (hs.HOSPITALIZESPECIALTYID = 1 or hs.HOSPITALIZESPECIALTYID = 2) then 1 
       when (su.UNITKEY in (3,4) or su.UNITKEY in (9,10)) and (hs.HOSPITALIZESPECIALTYID = 1 or hs.HOSPITALIZESPECIALTYID = 2) then (select distinct gender from PatientManagement..Customer where GENDER in (0,1)) 
       when hs.HOSPITALIZESPECIALTYID = 3 then (select [key] from configuration..tables ts where ts.[TABLE] = 'EstGenero') 
       when hs.HOSPITALIZESPECIALTYID = 4 and su.UNITKEY in (13,14) then (select [key] from configuration..tables ts where ts.[TABLE] = 'EstGenero') 
        end) 
+1

私は誤解されるかもしれませんが、あなたの性別cpmparisonをあなたと同じように使うことはできません:Gender in(CASE WHEN ... THEN [subselect])。最初にcteを作成してクエリに追加してみませんか?この方法では、副選択との比較は必要ありません。 – Tyron78

+0

FarzとTyron78は、複数の値を返すサブクエリをサポートするIN句を使用しているときに、IN句内で使用しているCASE文が、単一の値を返すサブクエリだけを受け入れるということです。 –

+0

あなたの大文字の表情は叙事詩的な割合の災害です。 3番目の述語は、1番目または2番目の述語がすでに起動されているため、到達できません。なぜ同じ列に複数のIN式を使用しているのか不明です。あなたの顧客テーブルから1行以上を返すジェンダーを選択するので、あなたにとってラッキーです。私はここに足を出ていますが、性別は常に0だと思われるので、あなたのテーブルの中の1つは、(0、1)のc.GENDERでこの奇怪なケースの表現を置き換えることはできませんか? –

答えて

1

ため

The subquery returned more than 1 values. This is not allowed when the subquery follows =,! =, <, <=,>,> = Or when it is used as an expression.

おかげでこれらのクエリのいずれかが複数の値を返すのですか?

select distinct gender from PatientManagement..Customer where GENDER in (0,1) 

select [key] from configuration..tables ts where ts.[TABLE] = 'EstGenero' 

フィールドが1または2のときは動作するので、2番目のクエリは複数の値を返すものだと思います。

+0

私はすでにこのオプションをテストしましたが、私は最初のクエリを使用しました:select distinct gender from PatientManagement..Customer where GENDER in (0,1) それは私に同じエラーを返します – almaje

+0

これはあなたの問題がどこにあるかです。要は、CASE文の3つのサブクエリのうちの1つが複数の値を返すということです。 – scsimon

関連する問題