2010-07-01 28 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

相關問題