2010-07-01 69 views
1
ID Code  Date 
1  3101  10/2/2010 
1  3101  15/2/2010 
2  3101  18/2/2010 
2  3101  25/4/2010 
2  3101  21/4/2010 

成以下我有以下表,并希望把行分为不同的列

ID Date1  Date2  Date3  Date4  Date5 
1 10/2/2010 15/2/2010 
2 18/2/2010 25/4/2010 21/4/2010 
+0

只要注意,现在发布的内容将不会被简单的数据透视查询解决。它看起来像是每个Id需要一行,并且该Id的每个不同日期都有一列(日期在列上“按升序排列”),结果列数与任何给定Id的最多日期一样多(即在你的例子,你知道每个ID最多会有5个日期) - 或者,你有一个硬性规定的上限,每个ID显示不超过5个日期? – 2010-07-01 13:46:40

+0

我想我的问题是,你需要多少个日期列,以及什么决定了每列中那些列的内涵? – 2010-07-01 13:47:37

+0

正是我需要的 - 我尝试使用光标,但我的知识让我失望,因为仍在学习 – 2010-07-01 13:51:21

回答

4

您可以使用PIVOT这一点。示例如下:

CREATE TABLE #Data 
(
    ID INT NOT NULL, 
    Code INT NOT NULL, 
    [Date] VARCHAR(20) NOT NULL 
) 
INSERT INTO #Data VALUES(1, 3101, '10-2-2010') 
INSERT INTO #Data VALUES(1, 3101, '15-2-2010') 
INSERT INTO #Data VALUES(2, 3101, '18-2-2010') 
INSERT INTO #Data VALUES(2, 3101, '25-4-2010') 
INSERT INTO #Data VALUES(2, 3101, '21-4-2010') 

SELECT ID, [1] AS Date1, [2] AS Date2, [3] AS Date3, [4] AS Date4 
FROM 
(SELECT ID, [Date], ROW_NUMBER() OVER(PARTITION BY ID ORDER BY ID) [RowNum] 
FROM #Data) AS p 
PIVOT (Max([Date]) FOR [RowNum] IN ([1],[2],[3],[4])) AS pvt 

假设您需要更多日期,这只是添加更多透视行的问题。

+0

SELECT ID,[日期1],[日期2],[DATE3],[Date4] \t FROM \t \t(SELECT ID,日期 \t \t \t FROM #tempAMS) \t \t \t \t p PIVOT(MAX(日期)对于日期IN([日期1],[日期2],[日期3],[日期4])) 作为pvt 这是我的尝试pivotand itdoesnt似乎工作 - Icant获取日期到相关列 – 2010-07-01 13:34:53

+0

我原本试图使用光标,我也将有其他代码进入其他日期列,所以我可以计算每个ID暂停的天数,但是这不会为我做 - 我是TSQL的新手,只用了几个月 – 2010-07-01 13:39:28

+0

我也试图让这个工作,但似乎我并不擅长摆脱数据..我会继续努力.. – 2010-07-01 13:42:12

相关问题