我有以下查询:在SQL Server中添加列支点查询
select
msisdn, value, date
from
tang
where
date > dateadd(mm, -6, getdate())
and value > 0
有了这样一些数据:
msisdn value date
772102730 1.0000 2016-01-07 08:48:30.540
772125566 2.0000 2016-01-07 10:01:50.753
772108924 1.0000 2016-01-07 10:04:27.940
772136349 5.0000 2016-01-07 10:08:07.183
772127823 1.0000 2016-01-07 10:08:19.773
774521923 1.0000 2016-01-07 10:10:13.927
和下面转动查询:
select msisdn,r1,r2,r3
from
(
select *
from
(
select msisdn, value, 'r'+convert(varchar(4),rank() over (partition by msisdn order by date asc)) as r
from tang
where date > dateadd(mm,-6,getdate())
and value > 0
) a
where r < 'r4'
) a
pivot
(
min(value)
for r in (r1,r2,r3)
) p
与以下数据:
msisdn r1 r2 r3
701048594 1.0000 2.0000 2.0000
720000810 2.0000 NULL NULL
720030474 2.0000 2.0000 NULL
720049121 4.5000 2.0000 3.0000
720187431 2.0000 2.0000 2.0000
720189845 3.0000 NULL NULL
720201300 5.0000 NULL NULL
720229335 2.0000 NULL NULL
720458626 2.0000 2.0000 2.0000
720512511 2.0000 5.0000 2.5000
,我想数据的列添加如下:
msisdn r1 r2 r3 d1 d2 d3
其中d1为R1的数据,D2是R2和D3的数据是R3
的数据如何做到这一点?
你是什么意思'd1是r1'等的数据?你的意思是日期栏中的值吗? – Taryn
pivot数据库的mssql实现非常有限。我建议你回到使用基于rank和group by子句的派生表和case表达式。 '最大(当r = 1,然后列结束时)' –
对于混淆感到抱歉,数据意味着r1的日期等,请参阅第一个表格。 – sorineatza