當前位置:首頁 » 編程語言 » sql中列轉行
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql中列轉行

發布時間: 2023-08-15 23:52:15

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 如何把多列的值 , 變成一列多行 .

  1. 行轉列,列轉行是我們在開發過程中經常碰到的問題

  2. 行轉列一般通過CASE WHEN 語句來實現,也可以通過 SQL SERVER 2005 新增的運算符PIVOT來實現。用傳統的方法,比較好理解。層次清晰,而且比較習慣。

  3. 但是PIVOT 、UNPIVOT提供的語法比一系列復雜的SELECT...CASE 語句中所指定的語法更簡單、更具可讀性.

  4. --行轉列的靜態方案一: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;

  5. --行轉列的靜態方案二: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