如何从主查询到子查询有一个 Link
how to have a Link from main query to sub query
我将两个值从一个 table 插入到另一个 table。插入的值之一来自连接三个列值。
我正在使用以下查询,但错误显示 "subquery has more than one value."
我们不能将 "top 1" 包含到子查询中,因为它给所有的值都相同。
insert into dbo.tblCrucibleLdgDtls (R2IGTNo,TotalMtrlWgt)
Select R2IGTNo,
(select RTRIM(LTRIM(( CONCAT(ULTotalS1S2MtrlWgt,ULTotalS3S4MtrlWgt,ULTotalS5S6MtrlWgt)))) as TotalMtrlWgt
from dbo.tbl1RMWeighingDetails
where ULTotalS1S2MtrlWgt is not null or ULTotalS3S4MtrlWgt is not null or ULTotalS5S6MtrlWgt is not null
)
from dbo.tbl1RMWeighingDetails
where R2IGTNo like '%C%'
来自Table
解决方法可能很简单。 I am not a expert.There is no duplicates and (ULTotalS1S2MtrlWgt,ULTotalS3S4MtrlWgt,ULTotalS5S6MtrlWgt) 与 R2IGTNo 有独特的关系。就像如果 R2IGTNo 有 b1 那么 ULTotalS1S2MtrlWgt 有值,如果 R2IGTNo 有 b2 那么 ULTotalS3S4MtrlWgt 有值,如果 R2IGTNo 有 b3 那么 ULTotalS5S6MtrlWgt 有值。使用该条件查询可以更改。
请建议。
为 table 提供别名:
SELECT ..., (SELECT ... FROM dbo.tbl1RMWeighingDetails wdA)
FROM dbo.tbl1RMWeighingDetails wdB
...
现在 inner/nested 子查询可以引用 wdB
,这将意味着 table.
的外部实例
而且,这看起来更适合使用 JOIN、APPLY 或窗口函数来完成。
解决方案取决于您从内部查询中获取的行类型。如果您的内部查询 returns 多个重复行,那么解决方案更简单,只需使用不同的 -
insert into dbo.tblCrucibleLdgDtls (R2IGTNo,TotalMtrlWgt)
Select R2IGTNo,
(select distinct RTRIM(LTRIM((CONCAT(ULTotalS1S2MtrlWgt,ULTotalS3S4MtrlWgt,ULTotalS5S6MtrlWgt)))) as TotalMtrlWgt
from dbo.tbl1RMWeighingDetails
where ULTotalS1S2MtrlWgt is not null or ULTotalS3S4MtrlWgt is not null or ULTotalS5S6MtrlWgt is not null
)
from dbo.tbl1RMWeighingDetails
where R2IGTNo like '%C%'
但是如果您的内部查询 returns 多行彼此不同,那么您必须重新访问您的要求。
我用cte得到了答案,MS论坛得到了建议
insert into dbo.tblCrucibleLdgDtls (R2IGTNo,TotalMtrlWgt)
Select R2IGTNo, coalesce(ULTotalS1S2MtrlWgt,ULTotalS3S4MtrlWgt,ULTotalS5S6MtrlWgt) as TotalMtrlWgt from dbo.tbl1RMWeighingDetails where R2IGTNo like '%C%'
或
with cte1 as(
select R2IGTNo,RTRIM(LTRIM(( CONCAT(ULTotalS1S2MtrlWgt,ULTotalS3S4MtrlWgt,ULTotalS5S6MtrlWgt)))) as TotalMtrlWgt
from dbo.tbl1RMWeighingDetails
where R2IGTNo like '%C%'
and (ULTotalS1S2MtrlWgt is not null
or ULTotalS3S4MtrlWgt is not null
or ULTotalS5S6MtrlWgt is not null))
insert into dbo.tblCrucibleLdgDtls (R2IGTNo,TotalMtrlWgt)
select * from cte1
总之谢谢大家。 -香卡
我将两个值从一个 table 插入到另一个 table。插入的值之一来自连接三个列值。 我正在使用以下查询,但错误显示 "subquery has more than one value." 我们不能将 "top 1" 包含到子查询中,因为它给所有的值都相同。
insert into dbo.tblCrucibleLdgDtls (R2IGTNo,TotalMtrlWgt)
Select R2IGTNo,
(select RTRIM(LTRIM(( CONCAT(ULTotalS1S2MtrlWgt,ULTotalS3S4MtrlWgt,ULTotalS5S6MtrlWgt)))) as TotalMtrlWgt
from dbo.tbl1RMWeighingDetails
where ULTotalS1S2MtrlWgt is not null or ULTotalS3S4MtrlWgt is not null or ULTotalS5S6MtrlWgt is not null
)
from dbo.tbl1RMWeighingDetails
where R2IGTNo like '%C%'
来自Table
解决方法可能很简单。 I am not a expert.There is no duplicates and (ULTotalS1S2MtrlWgt,ULTotalS3S4MtrlWgt,ULTotalS5S6MtrlWgt) 与 R2IGTNo 有独特的关系。就像如果 R2IGTNo 有 b1 那么 ULTotalS1S2MtrlWgt 有值,如果 R2IGTNo 有 b2 那么 ULTotalS3S4MtrlWgt 有值,如果 R2IGTNo 有 b3 那么 ULTotalS5S6MtrlWgt 有值。使用该条件查询可以更改。 请建议。
为 table 提供别名:
SELECT ..., (SELECT ... FROM dbo.tbl1RMWeighingDetails wdA)
FROM dbo.tbl1RMWeighingDetails wdB
...
现在 inner/nested 子查询可以引用 wdB
,这将意味着 table.
而且,这看起来更适合使用 JOIN、APPLY 或窗口函数来完成。
解决方案取决于您从内部查询中获取的行类型。如果您的内部查询 returns 多个重复行,那么解决方案更简单,只需使用不同的 -
insert into dbo.tblCrucibleLdgDtls (R2IGTNo,TotalMtrlWgt)
Select R2IGTNo,
(select distinct RTRIM(LTRIM((CONCAT(ULTotalS1S2MtrlWgt,ULTotalS3S4MtrlWgt,ULTotalS5S6MtrlWgt)))) as TotalMtrlWgt
from dbo.tbl1RMWeighingDetails
where ULTotalS1S2MtrlWgt is not null or ULTotalS3S4MtrlWgt is not null or ULTotalS5S6MtrlWgt is not null
)
from dbo.tbl1RMWeighingDetails
where R2IGTNo like '%C%'
但是如果您的内部查询 returns 多行彼此不同,那么您必须重新访问您的要求。
我用cte得到了答案,MS论坛得到了建议
insert into dbo.tblCrucibleLdgDtls (R2IGTNo,TotalMtrlWgt)
Select R2IGTNo, coalesce(ULTotalS1S2MtrlWgt,ULTotalS3S4MtrlWgt,ULTotalS5S6MtrlWgt) as TotalMtrlWgt from dbo.tbl1RMWeighingDetails where R2IGTNo like '%C%'
或
with cte1 as(
select R2IGTNo,RTRIM(LTRIM(( CONCAT(ULTotalS1S2MtrlWgt,ULTotalS3S4MtrlWgt,ULTotalS5S6MtrlWgt)))) as TotalMtrlWgt
from dbo.tbl1RMWeighingDetails
where R2IGTNo like '%C%'
and (ULTotalS1S2MtrlWgt is not null
or ULTotalS3S4MtrlWgt is not null
or ULTotalS5S6MtrlWgt is not null))
insert into dbo.tblCrucibleLdgDtls (R2IGTNo,TotalMtrlWgt)
select * from cte1
总之谢谢大家。 -香卡