2016-10-02 31 views
0

我有以下数据:移调多列一分列

Tag Name   PRD    Start   End 
10PIC700422.PV 10-PSV-700073A 9/9/16 10:44 9/9/16 10:49 
10PIC700422.PV 10-PSV-700073B 9/9/16 10:44 9/9/16 10:49 
10PIC700422.PV 10-PSV-700073A 9/9/16 10:50 9/9/16 10:51 
10PIC700422.PV 10-PSV-700073B 9/9/16 10:50 9/9/16 10:51 
11PIC41010.PV 11-PSV-401002A 4/4/16 12:51 4/4/16 13:58 
11PIC41010.PV 11-PSV-401002B 4/4/16 12:51 4/4/16 13:58 
11PIC41010.PV 11-PSV-401002A 4/4/16 14:04 4/4/16 14:29 
11PIC41010.PV 11-PSV-401002B 4/4/16 14:04 4/4/16 14:29 

我想通过标签名称和日期时间启动组,得到不同的标记名称和日期时间启动,但珠三角应换位单列与标签名称作为一列,看到结果我想得到:

Tag Name PRD         Start   End 
10PIC700422.PV 10-PSV-700073A 10-PSV-700073B 9/9/16 10:44 9/9/16 10:49 
10PIC700422.PV 10-PSV-700073A 10-PSV-700073B 9/9/16 10:50 9/9/16 10:51 
11PIC41010.PV 11-PSV-401002A 11-PSV-401002B  4/4/16 12:51 4/4/16 13:58 
11PIC41010.PV 11-PSV-401002A 11-PSV-401002B  4/4/16 14:04 4/4/16 14:29 

在此先感谢。 小号

+0

请编辑第二个电网还有一个比列有列标题。 –

+2

表中有四行具有相同的tagName。查询使用哪些行来获得这个标记名输出中的两个PRD?或者如果四个珠三角地区不同,您是否需要四列? –

回答

0

试试这个,

declare @t table(Tag_Name varchar(50), PRD varchar(50),Startdt datetime ,Enddt datetime) 
insert into @t values 
('10PIC700422.PV','10-PSV-700073A','9/9/16 10:44','9/9/16 10:49') 
,('10PIC700422.PV','10-PSV-700073B','9/9/16 10:44','9/9/16 10:49') 
,('10PIC700422.PV','10-PSV-700073A','9/9/16 10:50','9/9/16 10:51') 
,('10PIC700422.PV','10-PSV-700073B','9/9/16 10:50','9/9/16 10:51') 
,('11PIC41010.PV','11-PSV-401002A','4/4/16 12:51','4/4/16 13:58') 
,('11PIC41010.PV','11-PSV-401002B','4/4/16 12:51','4/4/16 13:58') 
,('11PIC41010.PV','11-PSV-401002A','4/4/16 14:04','4/4/16 14:29') 
,('11PIC41010.PV','11-PSV-401002B','4/4/16 14:04','4/4/16 14:29') 

; 

WITH CTE 
AS (
    SELECT * 
     ,ROW_NUMBER() OVER (
      PARTITION BY tag_name 
      ,startdt ORDER BY startdt 
      ) rn 
    FROM @t 
    ) 
SELECT tag_name 
    ,stuff((
      SELECT '-' + prd 
      FROM cte c1 
      WHERE c.Tag_Name = c1.Tag_Name 
       AND c.Startdt = c1.Startdt 
      FOR XML path('') 
      ), 1, 1, '') PRD 
    ,startdt 
    ,enddt 
FROM cte c 
WHERE rn = 1 
+0

KumarHarsh,您的查询工作速度更快。谢谢!! – Tony

+0

我相信John的查询由于截然不同而变慢。 – Tony