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