SQLSERVER資料集行列轉換PIVOT

2021-06-25 21:10:44 字數 2362 閱讀 8716

假設有表

create table 考勤

人員 varchar(10),

日期 varchar(8),

簽到 varchar(2)

insert into 考勤 values('張三', '20140901', '是')

insert into 考勤 values('張三', '20140902', '否')

insert into 考勤 values('李四', '20140901', '是')

select * from 考勤

人員日期 簽到

張三20140901 是

張三20140902 否

李四20140901 是

select * from 考勤

pivot(max(簽到) for 人員 in(張三, 李四)) 日期

日期張三 李四

20140901是 是

20140902否 null

更新:今天正好有碰到乙個需求用了這個方法,把例子和語句放上來

select * from

(select substring(examdate, 1, 6) as 月份,rrq.endoscopytype ,count(*) as 工作量

from ris_request rrq

where rrq.modalityremark=''us'' and rrq.examdate>''20130101''

group by rrq.endoscopytype,substring(examdate, 1, 6)

這個是原先的語句和結果集

月份 endoscopytype 工作量

201407 null 1

201407  3

201407 ge vivid e9 2

201408 ge vivid e9 1

201408 philips cx50 6

201409  4

201409 philips cx50 7

201409 飛利浦心超 ie33 1

201410  6

201410 philips m2540a 4

201410 飛利浦心超 ie33 1

統計每個月每個超聲裝置的工作量,需求要求將裝置固定在第一列,以月份作為剩下的列,每個結果為該裝置當月的工作量

declare @exammonthrange varchar(1000)

declare @sql varchar(6000)

set @exammonthrange = ''

select @exammonthrange = @exammonthrange + '[' + 月份 + '],'

from (

select distinct substring(ris_request.examdate,1, 6) as 月份

from ris_request

where modalityremark='us' and ris_request.examdate>'20130101'

) as 月份表

print @exammonthrange

if(len(@exammonthrange) > 0)

begin

set @exammonthrange = substring(@exammonthrange, 1, len(@exammonthrange) - 1);

print @exammonthrange;

set @sql =

'select * from

(select substring(examdate, 1, 6) as 月份,rrq.endoscopytype ,count(*) as 工作量

from ris_request rrq

where rrq.modalityremark=''us'' and rrq.examdate>''20130101''

group by rrq.endoscopytype,substring(examdate, 1, 6)

) as a

pivot(max(工作量) for 月份 in (' + @exammonthrange + ')) endoscopytype';

print @sql;

exec(@sql)

endendoscopytype 201407 201408 201409 201410

null 1 null null null

3 null 4 6

ge vivid e9 2 1 null null

philips cx50 null 6 7 null

philips m2540a null null null 4

飛利浦心超 ie33 null null 1 1

資料行列轉置函式

對於sqlserver資料庫列轉行用pivot函式,行轉列用unpivot函式。示例如下 use test create table tb2 name varchar 10 project varchar 10 score int insert into tb2 values 張三 跳遠 300 i...

sql server多重行列轉置的優化

將表1轉化成表2 表1 表2得到表2的結果,需要經過多次pivot轉換,再經union連線到一起,如下 1 select id,type,sum 1 1 sum 2 2 sum 3 3 sum 4 4 from2 3select a as type,from table 1 4 pivot sum ...

SQL Server行列轉換

行列轉換應該非常廣泛,也就是常說的交叉表,範例如下 注意事項 資料庫相容性級別 sql server 2005 90 建立臨時測試表 create table test 姓名 varchar 10 課程 varchar 10 分數 int insert into test values 張三 語文 ...