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

Sql 创建视图时select语句中的子查询,sql,select,views,Sql,Select,Views,在将数据迁移到新系统时,我需要创建一个视图。在创建此视图时,我需要创建一个子查询,其中表引用回自身以提取父组织信息。我已经创建了一个独立的查询,它可以正常工作,但是当我将其放入视图并在视图上执行select*时,我会收到错误消息“子查询返回的值超过1。当子查询后跟=、!=、=或子查询用作表达式时,这是不允许的。” 下面是我当前的视图创建语句 CREATE view [dbo].[Altai_V_Account] as SELECT cast(N.ID as nvarchar) as altai_

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

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

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”人员,但我们组织中没有。我基本上是在使用公司提供的代码示例进行迁移。我不知道为什么名称表被称为name,我们正在使用的软件的设计者们现在这样命名它


对于这个特定的子查询,记录列出了母公司的ID号(co_ID),但没有列出公司的名称。我想让查询看到CO_ID字段,然后用该ID提取公司名称附属机构。它作为普通查询工作,而不是子查询

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


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

这绝对是一个奇怪的查询。您正在三次访问同一个表,这可能是可以避免的。你修剪了所有的字段,甚至是ID,我想知道为什么当空间困扰你的时候,它们甚至被允许进入数据库。对于成员类型,您可以使用硬编码值,这样您就可以从一些表中更好地获得该组。最后,子查询与主查询不相关,因此总是选择相同的值。在您的示例中,是值,这就是为什么会出现错误。
Name
对于表来说是一个奇怪的名称。里面有什么?公司?那为什么它不叫
公司
?它在某种程度上是分层的(递归的)?为什么?这些级别代表什么?层次结构中是否有最大级别数?如果你解释一下你的查询应该做什么,也许会有帮助,这样我们就可以给你一些建议。