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

Subquery within a select statement when creating a view

在将数据迁移到新系统时,我需要创建一个视图。在创建此视图时,我需要创建一个子查询,其中 table 引用自身以提取父组织信息。我已经将查询创建为独立的并且它工作正常,但是当我将它放入视图并在视图上执行 select * 时,我收到错误消息 "Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression."

以下是我当前的视图创建语句。

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" 人,但我们组织中没有这样的人。我基本上使用的是执行迁移的公司提供给我的代码示例。我不知道为什么table这个名字叫name,我们现在使用的软件的设计者就是这样命名的。

对于这个特定的子查询,记录列出了母公司的 ID 号 (co_ID),而不是公司名称。我希望查询查看 CO_ID 字段,然后提取与该 ID 关联的公司名称。它作为一个普通查询工作,而不是作为一个子查询。

问题是,当您使用子查询代替列时,它应该 return 标量结果。也就是应该return一行一列。

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