/*
地點:重慶航天職業學院
說明:無 */
/*資料庫中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 codeselect
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度,但按數字來說正好是橫縱座標互換了。更...