2015-04-02 296 views
0

我有一個表在我的sql server.That表有一列。sql查詢顯示第二行數據到第一行和第三行數據到第二行等使用sql查詢

示例表名:樣品

列名:數據

數據

----------- 
7/11/2014 12:00:00 AM 

7/31/2014 12:00:00 AM 

8/21/2014 12:00:00 AM 

9/19/2014 12:00:00 AM 

11/20/2014 12:00:00 AM 

12/18/2014 12:00:00 AM 

1/22/2015 12:00:00 AM 

因此,通過這個數據我想添加一個額外的列,並在該專欄中,我想第二行數據到第一行,第三行數據到第二行......等等。

例子:

data      New Column                   

-----------     ----------------------                      

7/11/2014 12:00:00 AM  7/31/2014 12:00:00 AM                        

7/31/2014 12:00:00 AM  8/21/2014 12:00:00 AM                        

8/21/2014 12:00:00 AM  9/19/2014 12:00:00 AM                        

9/19/2014 12:00:00 AM  11/20/2014 12:00:00 AM                                            

11/20/2014 12:00:00 AM  12/18/2014 12:00:00 AM                               

12/18/2014 12:00:00 AM  1/22/2015 12:00:00 AM                        

1/22/2015 12:00:00 AM  Null 

提供給我的建議,我將如何得到我預期的輸出。

+0

表中是否有主鍵? – 2015-04-02 15:54:23

+0

一旦你已經檢索到數據,是否有理由不使用像php或python這樣的腳本語言來做到這一點? – 2015-04-02 18:06:27

回答

0

測試數據

DECLARE @Table TABLE (DateColumn DATETIME) 

INSERT INTO @Table VALUES 
('7/11/2014 12:00:00 AM'), 
('7/31/2014 12:00:00 AM'), 
('8/21/2014 12:00:00 AM'), 
('9/19/2014 12:00:00 AM'), 
('11/20/2014 12:00:00 AM'), 
('12/18/2014 12:00:00 AM'), 
('1/22/2015 12:00:00 AM') 

查詢

;WITH CTE AS 
(
SELECT DateColumn 
     ,ROW_NUMBER() OVER (ORDER BY DateColumn) rn 
FROM @Table 
) 
SELECT A.DateColumn AS DateColumn1 
     ,B.DateColumn AS DateColumn2 
FROM CTE A 
LEFT JOIN CTE B ON A.rn = B.rn - 1 

結果

╔═════════════════════════╦═════════════════════════╗ 
║  DateColumn1  ║  DateColumn2  ║ 
╠═════════════════════════╬═════════════════════════╣ 
║ 2014-07-11 00:00:00.000 ║ 2014-07-31 00:00:00.000 ║ 
║ 2014-07-31 00:00:00.000 ║ 2014-08-21 00:00:00.000 ║ 
║ 2014-08-21 00:00:00.000 ║ 2014-09-19 00:00:00.000 ║ 
║ 2014-09-19 00:00:00.000 ║ 2014-11-20 00:00:00.000 ║ 
║ 2014-11-20 00:00:00.000 ║ 2014-12-18 00:00:00.000 ║ 
║ 2014-12-18 00:00:00.000 ║ 2015-01-22 00:00:00.000 ║ 
║ 2015-01-22 00:00:00.000 ║ NULL     ║ 
╚═════════════════════════╩═════════════════════════╝ 
+0

你能建議我在下面的問題我得到輸出,但在第一行的空值 – mohan111 2015-04-02 17:01:50

+0

謝謝你的迴應 – Phani 2015-04-02 18:39:58

0
DECLARE @Table TABLE (DateColumn DATETIME) 

INSERT INTO @Table VALUES 
('7/11/2014 12:00:00 AM'), 
('7/31/2014 12:00:00 AM'), 
('8/21/2014 12:00:00 AM'), 
('9/19/2014 12:00:00 AM'), 
('11/20/2014 12:00:00 AM'), 
('12/18/2014 12:00:00 AM'), 
('1/22/2015 12:00:00 AM') 

;WITH CTE AS (
select DateColumn,ROW_NUMBER()OVER (ORDER BY DATECOLUMN)RN from @Table 
) 
select DATECOLUMN, DATECOLUMN As NewColumn from CTE WHERE RN > 1 
UNION ALL 
select DATECOLUMN,CASE WHEN RN = 1 then NULL ELSE ' ' END As NewColumn 
from CTE WHERE RN = 1 
ORDER BY DATECOLUMN 
相關問題