列名我想列轉換爲行中的SQL Server:轉換列行和SQL Server
Id Value Jan1 Jan2
----------------------
1 2 25 35
2 5 45 45
結果應該是
Id Value Month 1 2
----------------------
1 2 Jan 25 35
2 5 Jan 45 45
我怎樣才能得到這樣的結果?請人幫忙
列名我想列轉換爲行中的SQL Server:轉換列行和SQL Server
Id Value Jan1 Jan2
----------------------
1 2 25 35
2 5 45 45
結果應該是
Id Value Month 1 2
----------------------
1 2 Jan 25 35
2 5 Jan 45 45
我怎樣才能得到這樣的結果?請人幫忙
你在問什麼似乎有點奇怪。如果我向你的榜樣,包括列Feb1
和Feb2
,那麼,我認爲從這個調換你的列中的兩個選項:
+----+-------+------+------+------+------+
| Id | Value | Jan1 | Jan2 | Feb1 | feb2 |
+----+-------+------+------+------+------+
| 1 | 2 | 25 | 35 | 15 | 28 |
| 2 | 5 | 45 | 45 | 60 | 60 |
+----+-------+------+------+------+------+
移調剛剛月份部分:
select Id, Value, MonthName, MonthValue1, MonthValue2
from t
cross apply (values ('Jan',Jan1,Jan2),('Feb',Feb1,Feb2)
) v (MonthName,MonthValue1,MonthValue2)
回報:
+----+-------+-----------+-------------+-------------+
| Id | Value | MonthName | MonthValue1 | MonthValue2 |
+----+-------+-----------+-------------+-------------+
| 1 | 2 | Jan | 25 | 35 |
| 1 | 2 | Feb | 15 | 28 |
| 2 | 5 | Jan | 45 | 45 |
| 2 | 5 | Feb | 60 | 60 |
+----+-------+-----------+-------------+-------------+
或完全轉置月份列如下:
個select Id, Value, MonthName, MonthValue
from t
cross apply (values ('Jan1',Jan1),('Jan2',Jan2),('Feb1',Feb1),('Feb2',Feb2)
) v (MonthName,MonthValue)
回報:
+----+-------+-----------+------------+
| Id | Value | MonthName | MonthValue |
+----+-------+-----------+------------+
| 1 | 2 | Jan1 | 25 |
| 1 | 2 | Jan2 | 35 |
| 1 | 2 | Feb1 | 15 |
| 1 | 2 | Feb2 | 28 |
| 2 | 5 | Jan1 | 45 |
| 2 | 5 | Jan2 | 45 |
| 2 | 5 | Feb1 | 60 |
| 2 | 5 | Feb2 | 60 |
+----+-------+-----------+------------+
rextester演示:http://rextester.com/KZV45690
這似乎是:
select Id, Value, 'Jan' as [month], Jan1 as [1], Jan2 as [2]
from t;
你基本上只是增加另一列到輸出。
我不建議使用數字作爲列名,也不是SQL Server的關鍵字,如month
。
,月份列不可用。從SELECT子句中刪除月份列。 – Mansoor
這裏是你不會有指定多達365場
Declare @YourTable table (Id int,Value int,Jan1 int,Jan2 int,Feb1 int, Feb2 int)
Insert Into @YourTable values
(1, 2, 25, 35, 100, 101),
(2, 5, 45, 45, 200, 201)
Select [Id],[Value],[Month],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31]
From (
Select A.Id
,A.Value
,[Month] = Left(C.Item,3)
,[Col] = substring(C.Item,4,5)
,[Measure] = C.Value
From @YourTable A
Cross Apply (Select XMLData = cast((Select A.* for XML Raw) as xml)) B
Cross Apply (
Select Item = attr.value('local-name(.)','varchar(100)')
,Value = attr.value('.','int')
From B.XMLData.nodes('/row') as A(r)
Cross Apply A.r.nodes('./@*') AS B(attr)
Where attr.value('local-name(.)','varchar(100)') not in ('ID','Value')
) C
) A
Pivot (sum(Measure) For [Col] in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15],[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31])) p
返回一個選項
您的樣品和所需的結果有點薄。是今年或過年的這些日子嗎?會有多個月嗎? –