我在这张表中包含以下数据
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
答案 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