繁体   English   中英

将数据从一个表复制到SQL Server中的另一个表的过程

[英]Procedure to copy data from a table to another table in SQL Server

我有一个表A,具有4列:first_name,发票,值,日期。

和表B(first_name,max_invoice_name,max_invoice_value,last_date)

我想创建一个过程以将数据从A移到B,但是:
first_name应该是B中的一次,
max_invoice_name是最大发票值的名称
max_invoice_value是最大值
last_date是来自具有相同first_name的发票的最新日期。

例如:表A:

Smith | Invoice1  | 100 | 23.06.2016
John  | Invoice13 | 23  | 18.07.2016
Smith | Invoice3  | 200 | 01.01.2015


表B应为:

Smith |Invoice3 | 200 | 23.06.2016
John  |Invoice13| 23  | 18.07.2016

这样的事情应该起作用:

select *, (select max(date) from #Table1 T1 where T1.first_name = X.first_name)
from (
  select
    *, 
    row_number() over (partition by first_name order by invoice_Value desc) as RN
  from
    #Table1
) X
where RN = 1

行号负责选择具有最大价值的行,最大获取日期。 您需要在正确的位置而不是*列出列

您将需要创建2个标量函数getMaxNameForMaxValuegetLastDateByFirstName来获取所需的值。

INSERT INTO TableB (first_name, max_invoice_name, max_invoice_value, last_date) (SELECT DISTINCT first_name, getMaxNameForMaxValue(MAX(max_value)) AS 'max_invoice_name', MAX(max_invoice_value) AS 'max_invoice_value', getLastDateByFirstName(first_name) AS 'lastDate' FROM Table A)

您可以使用如下形式:

--INSERT INTO TableB 
SELECT  first_name,
        invoice_name,
        invoice_value,
        last_date
FROM (
    SELECT  a.first_name,
            a.invoice_name,
            a.invoice_value,
            COALESCE(p.last_date,a.last_date) as last_date,
            ROW_NUMBER() OVER (PARTITION BY a.first_name ORDER BY a.last_date) as rn
    FROM TableA a
    OUTER APPLY (SELECT TOP 1 * FROM TableA WHERE first_name = a.first_name and last_date > a.last_date) as p 
) as res
WHERE rn = 1

作为输出:

first_name  invoice_name    invoice_value   last_date
John        Invoice13       23              2016-07-18
Smith       Invoice3        200             2016-06-23

尝试这个

Insert into TableB(first_name, max_invoice_name, max_invoice_value, last_date)
select t1.first_name,t1.invoice,t1,value,t2.date from TableA as t1 inner join
(
select first_name, max(replace(invoice,'invoice','')) as invoice, max(date) as date 
  from TableA group by first_name
) as t2 on t1.first_name=t2.first_name and t1.invoice=t2.invoice

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM