sql server pivot使用日期来按列排序数据

时间:2015-11-24 16:11:33

标签: sql-server pivot unpivot

我的表组合如下:

/\D/g

我没有首次访问,第二次访问,第三次访问等指标... 第一次访问始终有' From' =办公室和上次访问总是有' To' =家。
制作序列的唯一方法是按日期(或从From-To ??)

向后移动

我希望的结果是:

Seller_ID |From        |To            |Depart_Date            |Arrival_Date  
-------------------------------------------------------------------------------------
Paul      |office      |client_23     |10/20/2015 3:30:00 PM  |10/21/2015 7:54:00 AM
Paul      |client_23   |client_ 88fe  |10/21/2015 11:55:00 AM |10/22/2015 8:11:00 PM
Paul      |client_88fe |client_avr4   |10/23/2015 3:57:00 PM  |10/26/2015 11:27:00 AM
Paul      |client_avr4 |home          |10/26/2015 5:28:00 PM  |10/28/2015 3:39:00 PM

任何帮助都是相关的! 提前谢谢。

1 个答案:

答案 0 :(得分:0)

如果您的案例只是每个卖家一次旅行,或者您在此处未显示另一个可以分组使用的字段,则可以使用以下内容:

select
  Seller_ID,
  max(case when RN = 1 then [From] end),
  max(case when RN = 1 then [Depart_Date] end),
  max(case when RN = 1 then [Arrival_Date] end),
  max(case when RN = 2 then [From] end),
  max(case when RN = 2 then [Depart_Date] end),
  max(case when RN = 2 then [Arrival_Date] end)
from (
  select 
    row_number() over (partition by Seller_ID 
                       order by Depart_Date asc) as RN,
    *
  from Table1
) X
group by Seller_ID

结果:

Seller_ID                       
Paul    office  October, 20 2015 15:30:00   October, 21 2015 07:54:00   client_23   October, 21 2015 11:55:00   October, 22 2015 20:11:00

SQL Fiddle

中的示例

如果您没有任何字段用于跟踪旅行次数,您可以按照Seller_ID分区的语句case when [From] = 'office' then 1 else 0 end的出发日期顺序使用运行总计,然后为行分配行程编号。< / p>