Sql server SQL Server:在一个字段不同的位置插入复杂的select查询

Sql server SQL Server:在一个字段不同的位置插入复杂的select查询,sql-server,tsql,Sql Server,Tsql,我试图从多个表中选择值并将它们插入到另一个表中。其中一个值应该是不同的。我如何使用CTE实现这一点 我的问题是: insert into Cycle (CycleID, PlotID, Product, Variety, Start, End) Select CycleID, o.ID, 'Product', v.ID, t.Start, t.End from Import as t inner join Varieties as v on t.Name like v.Name inner

我试图从多个表中选择值并将它们插入到另一个表中。其中一个值应该是不同的。我如何使用CTE实现这一点

我的问题是:

insert into Cycle (CycleID, PlotID, Product, Variety, Start, End)
Select CycleID, o.ID, 'Product', v.ID, t.Start, t.End
from 
Import as t 
inner join Varieties as v
on t.Name like v.Name
inner join Plots as o
on t.PlotCode like o.PlotCode

我必须在t.CycleID不同的地方创建这个仅选择条目。

一个可能的SQL技巧是使用带领带的
top 1与
按行顺序编号组合使用

;WITH CTE AS (

Select DISTINCT  CycleID, o.ID, 'Product', v.ID, t.Start, t.[End]
from 
Import as t 
inner join Varieties as v
on t.Name like v.Name
inner join Plots as o
on t.PlotCode like o.PlotCode )

insert into Cycle 
(CycleID, PlotID, Product, Variety, Start, [End] ) 
Select CycleID, PlotID, Product, Variety, Start, [End] from  CTE 
GROUP BY CycleID, PlotID, Product, Variety, Start, End 
insert into Cycle (CycleID, PlotID, Product, Variety, Start, End)
Select top 1 with ties CycleID, o.ID, 'Product', v.ID, t.Start, t.End
from Import as t 
inner join Varieties as v on t.Name like v.Name
inner join Plots as o on t.PlotCode like o.PlotCode
order by row_number() over (partition by CycleID order by o.ID desc, v.ID desc, t.Start desc, t.End desc)

免责声明:仅在记事本中测试

@BorisK Btw,您真的需要在这些连接中使用LIKE吗?除非是故意的,并且v.Name和o.PlotCode的字符串带有
%
(f.e.“x%y%1_2”),否则使用
=
可以让查询优化器想出更快的执行计划。啊,当然。我正在处理非常小的数据集,几百条记录,但会记住以后使用。