在 SQL2005 使用行轉列或列轉行

2022-01-23 23:32:36 字數 1717 閱讀 4610

在做報表時,經常需要將資料表中的行轉列,或者列轉行,如果不知道方法,你會覺得通過sql語句來實現非常難。這裡,我將使用pivot和unpivot來實現看似複雜的功能。這個功能在sql2005及以上版本才有。

引用msdn:

可以使用 pivot 和 unpivot 關係運算子將表值表示式更改為另乙個表。pivot 通過將表示式某一列中的唯一值轉換為輸出中的多個列來旋轉錶值表示式,並在必要時對最終輸出中所需的任何其餘列值執行聚合。unpivot 與 pivot 執行相反的操作,將表值表示式的列轉換為列值,但是在實際應用中,有些聚合之後的資料很難進行拆分。所以呢,unpivot並非pivot的逆過程。

pivot 提供的語法比一系列複雜的 select...case 語句中所指定的語法更簡單和更具可讀性。

使用select...case語句進行行轉列的方法見:解析sql server中行轉列問題

簡單的例子如下:

---------行轉列

--建表

create table test(編號 int,姓名 varchar(20),季度 int,銷售額 int)

insert into test values(1,'simon',1,1000)

insert into test values(1,'simon',2,2000)

insert into test values(1,'simon',3,3000)

insert into test values(1,'simon',4,4000)

insert into test values(2,'meme',1,5000)

insert into test values(2,'meme',2,6000)

insert into test values(2,'meme',3,7000)

insert into test values(2,'meme',4,8000)

--執行普通查詢

select * from test

--執行轉換查詢

select 編號,姓名,

[1] as "一季度",

[2] as "二季度",

[3] as "三季度",

[4] as "四季度",

[5] as "隨便1"

from

test

pivot

(sum(銷售額)

for 季度 in

([1],[2],[3],[4],[5])

)as pvt

--------列轉行

--建表

create table test2(編號 int,姓名 varchar(20), 一季度 int, 二季度 int, 三季度 int, 四季度 int)

insert into test2 values(1,'simon',1000,2000,4000,5000)

insert into test2 values(2,'meme',3000,3500,4200,5500)

--執行普通查詢

select * from test2

--執行轉換查詢

select 編號,姓名,季度,銷售額

from

test2

unpivot

(銷售額

for 季度 in

(一季度,二季度,三季度,四季度)

) as unpvt

SQL2005 行轉列 列轉行

在做報表時,經常需要將資料表中的行轉列,或者列轉行,如果不知道方法,你會覺得通過sql語句來實現非常難。這裡,我將使用pivot和unpivot來實現看似複雜的功能。這個功能在sql2005及以上版本才有。引用msdn 可以使用 pivot 和 unpivot 關係運算子將表值表示式更改為另乙個表。...

SQL2005中行轉列

sql2005中有函式可以直接將行轉列,這樣行轉列就好做多了。但是數值列和文字列稍有不同。1 文字列示例 create table tb 姓名 varchar 10 課程 varchar 10 分數 int insert into tb values 張三 語文 74 insert into tb ...

SQL2005語句實現行轉列,列轉行

在做報表時,經常需要將資料表中的行轉列,或者列轉行,如果不知道方法,你會覺得通過sql語句來實現非常難。這裡,我將使用pivot和unpivot來實現看似複雜的功能。這個功能在sql2005及以上版本才有。引用msdn 可以使用 pivot 和 unpivot 關係運算子將表值表示式更改為另乙個表。...