Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于将一条记录拆分为两条记录的sql_Sql_Sql Server - Fatal编程技术网

用于将一条记录拆分为两条记录的sql

用于将一条记录拆分为两条记录的sql,sql,sql-server,Sql,Sql Server,我有两个表,数据如下- 表1- id name id_start_date --------------------- 345 Fiamma 1/01/1900 表2- Change_Date Old_id New_id Users ------------------------------- 15/06/2017 123 345 abc@xyz.com 我正在寻找以下数据- id product_name start_date end_date ------------

我有两个表,数据如下- 表1-

id name id_start_date
---------------------
345 Fiamma 1/01/1900
表2-

Change_Date Old_id New_id Users
-------------------------------
15/06/2017  123     345     abc@xyz.com
我正在寻找以下数据-

id product_name start_date end_date
-----------------------------------    
123 Fiamma  1/01/1900   15/06/2017  
345 Fiamma  15/06/2017  31/12/2099
基本上,我想把表2的数据分成两条记录,一条记录有旧id和该id的开始和结束日期,另一条记录有新id和开始和结束日期


干杯

以下是您可以运行的测试:

    create table #table1 
(
 id int,
 name varchar(50),
 start_date datetime
)

GO 

create table #table2
(
 change_date datetime, 
 Old_id int,
 New_id int,
 users varchar(50)
)

GO 

insert into #table1
values (345,'Fiamma','01/01/1900')


insert into #table2
values ('15/06/2017',123,345,'abc@xyz.com')


select * from #table1
select * from #table2


select t2.old_id as id, t1.name as product_name, t1.start_date as start_date, t2.change_date as end_date
from #table1 t1
INNER JOIN #table2 t2 ON t1.id = t2.new_id

UNION

select t1.id as id, t1.name as product_name, t2.change_date as start_date , DATEADD(YEAR,+10,GETDATE()) as end_date
from #table1 t1
INNER JOIN #table2 t2 ON t1.id = t2.new_id



drop table #table1
drop table #table2

以下是您可以运行的测试:

    create table #table1 
(
 id int,
 name varchar(50),
 start_date datetime
)

GO 

create table #table2
(
 change_date datetime, 
 Old_id int,
 New_id int,
 users varchar(50)
)

GO 

insert into #table1
values (345,'Fiamma','01/01/1900')


insert into #table2
values ('15/06/2017',123,345,'abc@xyz.com')


select * from #table1
select * from #table2


select t2.old_id as id, t1.name as product_name, t1.start_date as start_date, t2.change_date as end_date
from #table1 t1
INNER JOIN #table2 t2 ON t1.id = t2.new_id

UNION

select t1.id as id, t1.name as product_name, t2.change_date as start_date , DATEADD(YEAR,+10,GETDATE()) as end_date
from #table1 t1
INNER JOIN #table2 t2 ON t1.id = t2.new_id



drop table #table1
drop table #table2

表2中是否有多个条目与同一最终项目(例如链)相关?为了理智起见,我假设它不能包含树。表2只记录旧id更改为新id的日期和时间,第一个表只保留当前值。是的,但我的意思是-该表中是否有另一行显示在2010年3月1日,id 6更改为id 123?如果是这样,那么可能会产生3行输出?表2中是否有多个条目与同一最终项(例如链)相关?为了理智起见,我假设它不能包含树。表2只记录旧id更改为新id的日期和时间,第一个表只保留当前值。是的,但我的意思是-该表中是否有另一行显示在2010年3月1日,id 6更改为id 123?如果是这样的话,那么可能会产生3行输出?这很有效,该死,我在第一个联合中使用了错误的列名。谢谢你们,它奏效了。真见鬼,我在第一联盟用错了列名。谢谢你们,成功了。