将表连接到另一个表后,在表中添加行

时间:2015-03-23 12:09:44

标签: sql-server sql-server-2008 sql-server-2008-r2 sql-server-2012

我在这张表中包含以下数据

user   DateKey        Dist
 10    20140904      102
 10    20140907      250
 10    20141003      120
 10    20141015      555
 15    20140904      180
 15    20140906      135
 15    20141023      120
 15    20141015      55
 15    20141126      155

和另一个包含以下数据的表

user   MonthKey     Price
 10   201409         12500
 10   201410         3000
 15   201409         20000
 15   201410         1000

我需要的是将表与user和DateKey一起加入MonthKey。结果表应如下所示

user   DateKey        Dist    Price
 10    20140904      102
 10    20140907      250
 10    201409                  12500
 10    20141003      120
 10    20141015      555
 10    201410                  3000
 15    20140904      180
 15    20140906      135
 15    201409                  20000
 15    20141023      120
 15    20141015      55
 15    201410                  1000
 15    20141126      155

3 个答案:

答案 0 :(得分:1)

SELECT [user], DateKey, Dist, null price
FROM table1
UNION ALL
SELECT [user], DateKey, null Dist, price
FROM table2
ORDER BY [user], DateKey

答案 1 :(得分:1)

declare @t table (userid int,datekey varchar(12),dist int)
insert into @t (userid,datekey,dist)values (10,'20140904',102)
insert into @t (userid,datekey,dist)values (10,'20140907',250)
insert into @t (userid,datekey,dist)values (10,'20141004',120)
insert into @t (userid,datekey,dist)values (10,'20141008',555)
insert into @t (userid,datekey,dist)values (15,'20140904',182)
insert into @t (userid,datekey,dist)values (15,'20140907',160)
insert into @t (userid,datekey,dist)values (15,'20141004',55)
insert into @t (userid,datekey,dist)values (15,'20141008',155)

declare @tt table (userid int,monthkey varchar(10),price int)
insert into @tt (userid,monthkey,price)values (10,'201409',12500)
insert into @tt (userid,monthkey,price)values (10,'201410',3000)
insert into @tt (userid,monthkey,price)values (15,'201409',2000)
insert into @tt (userid,monthkey,price)values (15,'201410',1000)
;WITH CTE_Date
AS(
select distinct 
userid,
datekey,
dist  ,
0 AS Price from @t 
UNION 
SELECT 
userid,
MonthKey+'28' AS datekey ,
0 AS DateKey,
price 
FROM @tt 
)
SELECT userid,
CASE WHEN SUBSTRING(datekey,7,2) ='28' THEN  LEFT(Datekey,6)+REPLACE(RIGHT(datekey,2),'28','') ELSE datekey END AS datekey,
 NULLIF(dist,'')  AS dist, 
 NULLIF(Price,'') AS Price 
 FROM CTE_Date ORDER BY userid,CAST(Datekey AS DATE) 

答案 2 :(得分:0)

将两个表联合在一起,然后在其周围包装一个选择以便能够组织结果。

SELECT W.UsrName,
       W.DateKey,
       W.Dist,
       W.Price
FROM (
SELECT TA.UsrName,
       TA.DateKey,
       TA.Dist, 
       NULL [Price] FROM Table1 TA 
UNION 
SELECT T.UsrName,
       T.MonthKey [DateKey],
       NULL,
       T.PRICE FROM Table2 T     
) W
ORDER BY W.UsrName, W.DateKey