A. sqlServer 列轉行
sql server 請參閱下面的代碼,列轉行
sqlserver列轉行方法分享
以下例子適用 sqlserver 2005版本及以上
createtableA(info1varchar(30),
[2012]int,
[2008]int,
[2018]int,
[2013]int
)
go
insertintoAvalues('A',8,null,null,20)
insertintoAvalues('B',null,7,null,3)
insertintoAvalues('C',12,4,null,null)
insertintoAvalues('D',null,null,5,16)
go
---列行轉換適用於sqlserver2005及以上版本
SELECTinfo1,nian,qty
fromA
unpivot(qtyfornianin([2012],[2008],[2018],[2013]))astest
GO
truncatetableA
droptableA
B. sql 最簡單的列轉行
oracle中列傳行可用wm_concat來實現。
如test表中數據如下:
現要將name列一列顯示成行,可用如下語句:
select wm_concat(name) from test;結果:
C. mysql列轉行(逗號分隔)
mysql查詢含逗號的數據,將逗號拆分為多行展示:
原始數據如下:
現在因為新的需求,需要將這些數據轉化為如下形式:
假設我們需要處理的表結構為:
使用如下sql語句即可實現需求:
查詢的主要思路為,原表與一個包含連續自增長欄位的表進行join,得到字元串分隔後的索引值,其中 length( a.name ) - length( REPLACE ( a.name, ',', '' ) ) + 1 語句獲得字元串逗號分隔之後得到的數據長度,兩表關聯之後,會得到相應行數的數據。比如,
在join之後會得到:
之後對查詢中的結果,使用substring_index方法進行截取,然後得到我們自己想要的數據。
D. sql server 列轉行
SQL Server 2005之後支持pivot關鍵字。
select year,[1],[2],[3],[4]
from 表A
pivot(max(num) for [month] in ([1],[2],[3],[4])) as pvt
SQL Server 2000以及之前版本,可以參考imlees的方法。
E. sql列轉行,如何把表轉化為這個結果一共一行 一列.如何實現.
通用的辦法是用動態sql解決:
declare@sqlvarchar(2000);
set@sql='select''';
select@sql=@sql+列名+','from表名;
select@sql=left(@sql,len(@sql)-1)+''''
exec(@sql);
此外,SQL Server2005以上版本可以用XML Path解決。
SELECT列名+','FROM表名FORXMLPATH('')
這樣將直接得到'a,b,c,d,d,e,',需要進一步處理去掉最後的逗號
F. sqlserver 怎麼列轉行
PIVOT 用於將列值旋轉為列名(即行轉列),在 SQL Server 2000可以用聚合函數配合CASE語句實現
PIVOT 的一般語法是:PIVOT(聚合函數(列) FOR 列 in (…) )AS P
注意:PIVOT、UNPIVOT是SQL Server 2005 的語法,使用需修改資料庫兼容級別(在資料庫屬性->選項->兼容級別改為 90 )
SQL2008 中可以直接使用
完整語法:
table_source
PIVOT(
聚合函數(value_column)
FOR pivot_column
IN(<column_list>)
)
View Code
UNPIVOT 用於將列明轉為列值(即列轉行),在SQL Server 2000可以用UNION來實現
完整語法:
table_source
UNPIVOT(
value_column
FOR pivot_column
IN(<column_list>)
)
G. MS SQL SERVER 如何把多列的值 , 變成一列多行 .
行轉列,列轉行是我們在開發過程中經常碰到的問題
行轉列一般通過CASE WHEN 語句來實現,也可以通過 SQL SERVER 2005 新增的運算符PIVOT來實現。用傳統的方法,比較好理解。層次清晰,而且比較習慣。
但是PIVOT 、UNPIVOT提供的語法比一系列復雜的SELECT...CASE 語句中所指定的語法更簡單、更具可讀性.
--行轉列的靜態方案一:CASE WHEN,兼容sql2000
select custid,
3 sum(case when YEAR(orderdate)=2002 then qty end) as [2002],
sum(case when YEAR(orderdate)=2003 then qty end) as [2003],
sum(case when YEAR(orderdate)=2004 then qty end) as [2004]
from orders
group by custid;--行轉列的靜態方案二:PIVOT,sql2005及以後版本
select *
from (select custid,YEAR(orderdate) as years,qty from orders) as ord
pivot(sum(qty) for years in([2002],[2003],[2004]))as p