2014-04-21 37 views
-3

我有以下數據分離行的數據列在SQL

Date   Value 
--------------------- 
2014-01-01  20 
2014-01-02  18 
2014-01-03  06 
2014-02-01  22 
2014-02-02  162 
2014-02-03  16 

在這裏,我有2個月的第3日的數據表。我得到的輸出作爲

Date Jan 2014 Feb 2014 
------------------------- 
01 20   06 
02 18   162 
03 06   16 
+2

什麼具有u試過嗎? –

+0

它被稱爲交叉標籤或數據透視查詢 –

+1

哪些混淆upvoted一個問題,顯示沒有嘗試? –

回答

1

測試數據

DECLARE @TABLE TABLE([Date] DATE,Value INT) 
INSERT INTO @TABLE VALUES 
('2014-01-01',20) ,('2014-01-02',18), 
('2014-01-03',06) ,('2014-02-01',22), 
('2014-02-02',162) ,('2014-02-03',16) 

查詢

SELECT * FROM (
SELECT DAY([Date]) AS [Date] 
     ,LEFT(DATENAME(MONTH,[Date]), 3) 
     + ' ' + CAST(YEAR([Date]) AS NVARCHAR(4)) Mon_YYYY 
     , Value 
FROM @TABLE) t 
PIVOT (SUM(Value) 
     FOR Mon_YYYY 
     IN ([Jan 2014],[Feb 2014]) 
     )P 

結果集

╔══════╦══════════╦══════════╗ 
║ Date ║ Jan 2014 ║ Feb 2014 ║ 
╠══════╬══════════╬══════════╣ 
║ 1 ║  20 ║  22 ║ 
║ 2 ║  18 ║  162 ║ 
║ 3 ║  6 ║  16 ║ 
╚══════╩══════════╩══════════╝ 

您將需要使用Dynamic sql來反轉實際數據,因爲列中可能存在許多值,並且此解決方案對於現實生活中的問題並不實際,但至少可以讓您瞭解如何去解決這個問題。請參閱此How to pivot unknown number of columns & no aggregate in SQL Server?以瞭解如何動態旋轉行。

+0

很好..很好。謝謝 – Akhil

+0

很高興幫助:) –

0

您可以使用PIVOT如下

declare @t table (sdate date,val int) 
insert into @t values('2014-01-01',  20) 
insert into @t values('2014-01-02',  18) 
insert into @t values('2014-01-03',  06) 
insert into @t values('2014-02-01',  22) 
insert into @t values('2014-02-02',  162) 
insert into @t values('2014-02-03',  16) 

select * from 
(
select datepart(d,sdate) sday,DATENAME(MONTH, sdate)+' '+cast(datepart(YYYY,sdate) as varchar) yearMonth,val from @t 
) t 
pivot 
(
sum(val) 
FOR YearMonth IN ([January 2014],[February 2014]) 
) AS PivotTable; 

,這是結果

sday January 2014 February 2014 
1  20  22 
2  18  162 
3  6  16