创建视图时 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 多行或多列。请先单独尝试子查询以检查它是否重新调整标量值。
在将数据迁移到新系统时,我需要创建一个视图。在创建此视图时,我需要创建一个子查询,其中 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 多行或多列。请先单独尝试子查询以检查它是否重新调整标量值。