Sql 创建视图时select语句中的子查询
在将数据迁移到新系统时,我需要创建一个视图。在创建此视图时,我需要创建一个子查询,其中表引用回自身以提取父组织信息。我已经创建了一个独立的查询,它可以正常工作,但是当我将其放入视图并在视图上执行select*时,我会收到错误消息“子查询返回的值超过1。当子查询后跟=、!=、=或子查询用作表达式时,这是不允许的。” 下面是我当前的视图创建语句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_
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
对于表来说是一个奇怪的名称。里面有什么?公司?那为什么它不叫公司
?它在某种程度上是分层的(递归的)?为什么?这些级别代表什么?层次结构中是否有最大级别数?如果你解释一下你的查询应该做什么,也许会有帮助,这样我们就可以给你一些建议。