-1

有人可以帮助我使用“创建视图”代码来获得下面的结果集。

CREATE VIEW MyView AS (SELECT .....FROM Movements ...)

我有一个像这样的“运动”表:

 
ID 名称 城市起始日期
U1 史密斯纽约 2000 年 1 月 1 日
U1 史密斯奥斯汀 2001 年 12 月 1 日
U1 史密斯斯科茨代尔 2002 年 7 月 1 日
U2 杰克休斯顿 2000 年 9 月 1 日
U2 杰克纽约 2000 年 11 月 1 日
U3 简诺克斯维尔 2000 年 2 月 1 日
U3 简·里士满 1 捷运 2001
U3 Jane 圣地亚哥 2002 年 1 月 1 日
U3 简橡树公园 2004 年 10 月 1 日

我想看看这些人的动作。

我可能有 2 个结果集。我知道,第一个有列数限制。

我喜欢查看每个结果集

结果集 1:

ID 名称 城市 1 城市 2 城市 3 城市 4
U1 史密斯纽约奥斯汀斯科茨代尔    
U2 Jack Houton 纽约        
U3 简诺克斯维尔里士满圣地亚哥橡树公园

或者

结果集2

ID名称城市从日期到城市
U1 史密斯纽约 2000 年 1 月 1 日奥斯汀
U1 史密斯奥斯汀 2001 年 12 月 1 日斯科茨代尔
U1 史密斯斯科茨代尔 2002 年 7 月 1 日  
U2 杰克休斯顿 2000 年 9 月 1 日 纽约
U2 杰克纽约 2000 年 11 月 1 日  
U3 Jane Knoxville 2000 年 2 月 1 日 里士满
U3 Jane Richmond 1 mrt 2001 圣地亚哥
U3 Jane San Diego 2002 年 1 月 1 日 Oak Park
U3 简橡树公园 2004 年 10 月 1 日  
4

1 回答 1

0

您可以LEAD对结果集 2 使用窗口函数

SELECT ID,
       NAME,
       City,
       [from date],
       toCity = Coalesce(Lead(City)over(Partition by ID, name order by [from date]),'')
FROM   Yourtable

结果集 1 需要dynamic pivot

DECLARE @sql      NVARCHAR(max),
        @col_list VARCHAR(max)

SET @col_list =Stuff((SELECT DISTINCT ','+ Quotename('City '+ Cast(Row_number()OVER(partition BY ID ORDER BY [from date]) AS VARCHAR(50)))
                      FROM   Yourtable
                      FOR xml path('')), 1, 1, '')
SET @sql = '
select * 
    from (select ID,name,City,city_num =''City ''+ cast(row_number()over(partition by ID order by [from date]) as varchar(50))  
            from Yourtable) a
    pivot (max(city) for city_num in ('+ @col_list + ')) pv'

EXEC Sp_executesql @sql 
于 2017-12-29T15:59:26.043 回答