90度旋轉行列轉換之一

2021-05-24 21:48:52 字數 4828 閱讀 8893

/*

地點:重慶航天職業學院

說明:無 */

/*資料庫中tb**如下

月份 工資 福利 獎金

1月 100 200 300

2月 110 210 310

3月 120 220 320

4月 130 230 330

我想得到的結果是

專案 1月 2月 3月 4月

工資 100 110 120 130

福利 200 210 220 230

獎金 300 310 320 330

就是說完全把**的行列顛倒,有點像那種旋轉矩陣,請問如何用sql 語句實現? */

sql code

/*--行列互換的通用儲存過程(原著:鄒建):將指定的表,按指定的字段進行行列互換

*/create

proc

p_zj

@tbname

sysname,

--要處理的表名

@fdname

sysname,

--做為轉換的列名

@new_fdname

sysname=''

--為轉換後的列指定列名

asdeclare

@s1varchar

(8000

) ,

@s2varchar

(8000

),

@s3varchar

(8000

) ,

@s4varchar

(8000

),

@s5varchar

(8000

) ,

@ivarchar(10

)select

@s1=

'',

@s2=

'',

@s3=

'',

@s4=

'',

@s5=

'', @i=

'0'select

@s1=

@s1+',@

'+@i+

'varchar(8000)',

@s2=

@s2+',@

'+@i+

'='''+

case

isnull

(@new_fdname

, ''

) when

''then

''else

@new_fdname+'

='end+

''''''

+name

+''''''''

,

@s3=

@s3+

'select @'+

@i+'=@

'+@i+

'+'',[

''+ ['+

@fdname+'

]+''

]=''

+cast(['+

name +'

] as varchar) from ['+

@tbname+'

]',

@s4=

@s4+',@

'+@i+

'=''select

''+@'+

@i,@s5=

@s5+'+

''union all

''+@'+

@i,@i=

cast(@i

asint)+

1from

syscolumns

where

object_id

(@tbname)=

id and

name

<>

@fdname

select

@s1=

substring

(@s1,2

,8000

),

@s2=

substring

(@s2,2

,8000

),

@s4=

substring

(@s4,2

,8000

),

@s5=

substring

(@s5,16

,8000

)exec('

declare '+

@s1+

'select '+

@s2+

@s3+

'select '+

@s4+

'exec('+

@s5+')

')go--

建立測試資料

create

table

test(月份

varchar(4

), 工資

int, 福利

int, 獎金

int)

insert

test

select'1月

',100,

200,

300union

allselect'2月

',110,

210,

310union

allselect'3月

',120,

220,

320union

allselect'4月

',130,

230,

330go

--用上面的儲存過程測試:

exec

p_zj

'test',

'月份',

'專案'drop

table

test

drop

proc

p_zj

/*專案 1月 2月 3月 4月

-------- ------ -------- -------- --------

獎金 300 310 320 330

工資 100 110 120 130

福利 200 210 220 230

(所影響的行數為 3 行)

*/

sql code

--sql2005靜態寫法

--建立測試資料

create

table

test(月份

varchar(4

), 工資

int, 福利

int, 獎金

int)

insert

test

select'1月

',100,

200,

300union

allselect'2月

',110,

210,

310union

allselect'3月

',120,

220,

320union

allselect'4月

',130,

230,

330go

select

*from(

select

考核月份,月份,金額

from

(select

月份, 工資, 福利, 獎金

from

test) p

unpivot

(金額

for考核月份

in(工資, 福利, 獎金))

asunpvt

) tpivot

(max

(金額)

for月份 in(

[1月],

[2月],

[3月],

[4月]))

aspt

drop

table

test

/*專案 1月 2月 3月 4月

-------- ------ -------- -------- --------

獎金 300 310 320 330

工資 100 110 120 130

福利 200 210 220 230

(3 行受影響)

*/

sql code 

select

max(

case

item1

when

'linecustomizationamount

'then

item2

else

''end

) as

linecustomizationamount,

max(case

item1

when

'linediscountamount

'then

item2

else

''end

) as

linediscountamount,

max(case

item1

when

'linegiftwrapamount

'then

item2

else

''end

) as

linegiftwrapamount

from

tb

行列轉換(列轉行)

行列轉換 列轉行 create table tb 姓名 nvarchar 20 數學 int,英語 int,語文 int go insert into tb select 李四 87,82,0 union select 張三 93,78,98 goselect from tb godeclare s...

文字旋轉90度

文字旋轉90度 一,新建乙個單文件工程changefont。二,修改changefontview ondraw函式,如下 void cchangefontview ondraw cdc pdc 三。msdn對lfescapement的解釋如下 specifies the angle,in tenth...

矩陣旋轉90度

寫這道分形題的時候,發現旋轉部分不是很明白,就又回顧了一下矩陣旋轉90度的左邊變換關係。僅僅交換x,y座標不算矩陣旋轉90度,只能算矩陣順時針旋轉90度又左右旋轉了一下 可以畫圖或者畫x y座標軸將x,y互調試試 但是本題奇妙的是這按照形狀來說是順時針旋轉90度,但按數字來說正好是橫縱座標互換了。更...