日期:2014-05-16  浏览次数:21017 次

提示子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的
SELECT 医疗付款方式,
姓名,
性别,
年龄,
生日,
工作单位及地址,
户口地址,
case 医疗付款方式 when '医保' then (select 公民身份证 from VIEW_EMR_PATIENT_all) when '公费' then  (select 公民身份证 from VIEW_EMR_PATIENT_all ) else '' end as 公民身份证,
床号,
科别,
病区,
入院床位医生,
出院时间,
出院日期,
入院时间,
入院日期
from VIEW_EMR_PATIENT_all


查询这个语句后,提示:
消息 512,级别 16,状态 1,第 1 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。


各位大侠,该如何解决呢?

------解决方案--------------------
试试:
SELECT  医疗付款方式 ,
        姓名 ,
        性别 ,
        年龄 ,
        生日 ,
        工作单位及地址 ,
        户口地址 ,
        CASE 医疗付款方式
          WHEN '医保' THEN ( SELECT TOP 1  公民身份证
                           FROM     VIEW_EMR_PATIENT_all 
                         )
          WHEN '公费' THEN ( SELECT TOP 1  公民身份证
                           FROM     VIEW_EMR_PATIENT_all
                         )
          ELSE ''
        END AS 公民身份证 ,
        床号 ,
        科别 ,
        病区 ,
        入院床位医生 ,
        出院时间 ,
        出院日期 ,
        入院时间 ,
        入院日期
FROM    VIEW_EMR_PATIENT_all

------解决方案--------------------
你这个视图有没有哪个是主键?
------解决方案--------------------
主要的错误在这个:

case 医疗付款方式 when '医保' then (select 公民身份证 from VIEW_EMR_PATIENT_all) when '公费' then  (select 公民身份证 from VIEW_EMR_PATIENT_all ) else '' end as 公民身份证,

这个子查询select 公民身份证 from VIEW_EMR_PATIENT_all会返回多条记录,所以才会报错。

你需要限制这个查询至返回1条。


------解决方案--------------------
比如可以这样:



SELECT  医疗付款方式 ,
        姓名 ,
    &nb