创建视图时,select语句中的子查询

时间:2016-01-22 14:40:39

标签: sql select views

我需要创建一个视图,因为我们正在将数据迁移到新系统中。在创建此视图时,我需要创建一个子查询,其中表引用自身以提取父组织信息。我已经创建了一个独立的查询,它工作正常,但是当我将它放入视图并在视图上执行select *时,我收到错误消息" Subquery返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。"

以下是我当前的View Creation语句。

CREATE view [dbo].[Altai_V_Account] as
SELECT cast(N.ID as nvarchar) as altai_legacymemberid,
      RTRIM (n.company) as name,
      RTRIM (cd.aha) as aha_memberID,
      RTRIM (n.member_type) as altai_base_customertypeid,
      RTRIM (na.ADDRESS_1) as address1_line1,
      RTRIM (na.ADDRESS_2) as address1_line2,
      RTRIM (na.city) as address1_city,
      RTRIM (na.state_province) as address1_stateorprovince,
      RTRIM (na.zip) as address1_postalcode,
      RTRIM (n.Fax) as fax,
      RTRIM (n.WORK_PHONE) as telephone1,
      RTRIM (cd.FTE) as numberofemployees,
      RTRIM (n.co_id) as ParentAccountID,
      RTRIM (n.website) as websiteurl,
      RTRIM (cd.LICENSED_BEDS) as gha_bedcalculation,
      (select CompN.COMPANY
          From Name as n inner join Name as CompN on n.CO_ID=CompN.ID
              Where n.CO_ID=CompN.id
              and n.STATUS='A'
             and (n.MEMBER_TYPE ='HCE'
                    or n.MEMBER_TYPE ='I'
                    or n.MEMBER_TYPE ='SA'
                    or n.MEMBER_TYPE ='SI'
                    or n.MEMBER_TYPE ='SM'
                    or n.MEMBER_TYPE ='SPON'
                    or n.MEMBER_TYPE ='SYS'
                    or n.MEMBER_TYPE ='VP'
                    or n.MEMBER_TYPE ='VPA'
                    or n.MEMBER_TYPE ='ASC'
                    or n.MEMBER_TYPE = 'C'
                    or n.MEMBER_TYPE = 'HCS'
                    or n.MEMBER_TYPE = 'NH'
                    or n.MEMBER_TYPE = 'NMI')) as parentaccount


FROM Name as N
    inner join Company_Demo as cd on N.id=cd.ID
    inner join Name_Address as na on N.ID=NA.ID
WHERE N.MEMBER_TYPE ='HCE'
 or N.MEMBER_TYPE ='I'
 or N.MEMBER_TYPE ='SA'
 or N.MEMBER_TYPE ='SI'
 or N.MEMBER_TYPE ='SM'
 or N.MEMBER_TYPE ='SPON'
 or N.MEMBER_TYPE ='SYS'
 or N.MEMBER_TYPE ='VP'
 or N.MEMBER_TYPE ='VPA'
 or N.MEMBER_TYPE ='ASC'
 or N.MEMBER_TYPE = 'C'
 or N.MEMBER_TYPE = 'HCS'
 or N.MEMBER_TYPE = 'NH'
 or N.MEMBER_TYPE = 'NMI'
 and na.STATUS='A'

谢谢!

更新:我不是" SQL"是的,但我们的组织中没有人。我基本上使用公司提供给我的代码示例进行迁移。我不知道为什么名称表被称为名称,我们正在使用的软件的设计者当前以这种方式命名。

对于此特定子查询,记录列出了母公司的ID号(co_ID),但不列出公司名称。我希望查询能够查看CO_ID字段,然后将该公司名称附属于该ID。它作为普通查询工作,而不是作为子查询。

1 个答案:

答案 0 :(得分:0)

问题是当你使用子查询代替列时,它应该返回标量结果。那就是它应该返回一行一列。

在您的情况下,子查询将返回多个行或列。请先单独尝试子查询,检查它是否重新调整标量值。