昨日から、この要求に固執していますので、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)
私は誤解されるかもしれませんが、あなたの性別cpmparisonをあなたと同じように使うことはできません:Gender in(CASE WHEN ... THEN [subselect])。最初にcteを作成してクエリに追加してみませんか?この方法では、副選択との比較は必要ありません。 – Tyron78
FarzとTyron78は、複数の値を返すサブクエリをサポートするIN句を使用しているときに、IN句内で使用しているCASE文が、単一の値を返すサブクエリだけを受け入れるということです。 –
あなたの大文字の表情は叙事詩的な割合の災害です。 3番目の述語は、1番目または2番目の述語がすでに起動されているため、到達できません。なぜ同じ列に複数のIN式を使用しているのか不明です。あなたの顧客テーブルから1行以上を返すジェンダーを選択するので、あなたにとってラッキーです。私はここに足を出ていますが、性別は常に0だと思われるので、あなたのテーブルの中の1つは、(0、1)のc.GENDERでこの奇怪なケースの表現を置き換えることはできませんか? –