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
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
您可以使用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
假设您需要更多日期,这只是添加更多透视行的问题。
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
我原本试图使用光标,我也将有其他代码进入其他日期列,所以我可以计算每个ID暂停的天数,但是这不会为我做 - 我是TSQL的新手,只用了几个月 – 2010-07-01 13:39:28
我也试图让这个工作,但似乎我并不擅长摆脱数据..我会继续努力.. – 2010-07-01 13:42:12
只要注意,现在发布的内容将不会被简单的数据透视查询解决。它看起来像是每个Id需要一行,并且该Id的每个不同日期都有一列(日期在列上“按升序排列”),结果列数与任何给定Id的最多日期一样多(即在你的例子,你知道每个ID最多会有5个日期) - 或者,你有一个硬性规定的上限,每个ID显示不超过5个日期? – 2010-07-01 13:46:40
我想我的问题是,你需要多少个日期列,以及什么决定了每列中那些列的内涵? – 2010-07-01 13:47:37
正是我需要的 - 我尝试使用光标,但我的知识让我失望,因为仍在学习 – 2010-07-01 13:51:21