我每天都有一个存储过程,并且工作简单。工作原理:
因此。这里的程序:
ALTER PROCEDURE [dbo].[CreateQueueAccountOrder]
@dtUtc datetime
AS
BEGIN
delete from dbo.[Feedback.QueueAccountOrder] -- clean dest table
create table #TempTree
(
[Total] int,
[AccountCode] nvarchar(20),
[AccountName] nvarchar(512),
[Utc] float,
[CityCode] nvarchar(50),
[CityName] nvarchar(128)
)
-- getting actual flat tree
insert into #TempTree exec GetActualFeedbackQueueTree @dtUtc
declare @total int;
select @total = count(*) from #TempTree
print 'total nodes ' + str(@total)
select distinct tA.AccountCode, tA.AccountName, tA.Utc, tC.CityCode, tC.CityName
from #TempTree tC
left join #TempTree tA
on tA.CityCode = tC.CityCode
order by tC.CityName,tA.AccountName
END
另一张表是:
CREATE TABLE [dbo].[Feedback.QueueAccountOrder](
[QOrder] [int] NOT NULL,
[Code] [nvarchar](20) NOT NULL,
[Utc] [float] NULL
) ON [PRIMARY]
目标是用最后选择的存储过程的结果填充此表。不是QOrder
需要来自select(1,2,3,4等)的订单,Code
和Utc
来自选择结果。
所以。怎么解决?谢谢!
PS。堆: T-SQL,MS SQL Server 2012
答案 0 :(得分:1)
如果我已正确理解你的目标 - 你需要这样的东西:
insert into dbo.Feedback.QueueAccountOrder
(
QOrder,
Code,
Utc
)
select
row_number() over(order by T.CityName, T.AccountName),
T.AccountCode,
T.Utc
from
(
select distinct tA.AccountCode, tA.AccountName, tA.Utc, tC.CityCode, tC.CityName
from #TempTree tC
left join #TempTree tA on tA.CityCode = tC.CityCode
) as T
我不确定最终选择中的字段映射,因为它不清楚 - 如果它是AccountCode或CityCode - 它取决于你。
但关键思想保持不变 - 首先选择您的不同值,然后使用row_number
作为结果集的枚举器从select中插入数据。