从有序选择结果中插入

时间:2015-05-05 08:16:40

标签: sql sql-server tsql

我每天都有一个存储过程,并且工作简单。工作原理:

  1. 获取实体的“
  2. 填写临时表
  3. 从临时表中选择有序数据
  4. 填写另一张包含3列的表格 - 此处我有一个问题因为我无法从有序选择中插入
  5. 因此。这里的程序:

    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等)的订单,CodeUtc来自选择结果。 所以。怎么解决?谢谢!

    PS。堆: T-SQL,MS SQL Server 2012

1 个答案:

答案 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中插入数据。