1  /  1  页   1 跳转 查看:3057

行列的互换一

行列的互换一

/*
        测试环境:windows 2K server + Mssql 2000
        所有功能都进行测试过,并有相应的结果集,如果有什么疑义在论坛跟帖
        关于版权的说明:部分资料来自互联网,如有不当请联系版主,版主会在第一时间处理。
        功能:行列的互换一。
*/


--数据准备
CREATE TABLE #T(bh VARCHAR(10),gx VARCHAR(3),dept VARCHAR(3))
INSERT #T
SELECT                  'TMS1056AD',    '01',        'A-a' 
UNION ALL SELECT 'TMS1056AD',    '02',        'B-a' 
UNION ALL SELECT 'TMS1056AD',    '03',        'C-a' 
UNION ALL SELECT 'TMS1056AD',    '04',        'E-a' 
UNION ALL SELECT 'TMS1056AD',    '05',        'G-a'
UNION ALL SELECT 'TMS1056AD',    '06',        'D-a'
UNION ALL SELECT 'TMS1058AD',    '06',        'A-a'   
UNION ALL SELECT 'TMS1058AD',    '07',        'D-a'   
UNION ALL SELECT 'TMS1058AD',    '08',        'F-a'

SELECT * FROM #T
/*
bh        gx  dept
---------- ---- ----
TMS1056AD  01  A-a
TMS1056AD  02  B-a
TMS1056AD  03  C-a
TMS1056AD  04  E-a
TMS1056AD  05  G-a
TMS1056AD  06  D-a
TMS1058AD  06  A-a
TMS1058AD  07  D-a
TMS1058AD  08  F-a
*/

-- SQL
declare @sql varchar(8000)
set @sql='select bh'
select @sql= @sql+ ',min(case when gx = ''' + gx + ''' then dept end) [' + gx + ']' from (select distinct gx from #T) a
set @sql=@sql+' from #T group by bh'
--print @sql
exec (@sql)

/*

bh        01  02  03  04  05  06  07  08 
---------- ---- ---- ---- ---- ---- ---- ---- ----
TMS1056AD  A-a  B-a  C-a  E-a  G-a  D-a  NULL NULL
TMS1058AD  NULL NULL NULL NULL NULL A-a  D-a  F-a

*/
心若无尘,一花一世界,一鸟一天堂
 

回复:行列的互换一

--你要是想完美点, 不要那个烦人的NULL,怎么办呢,
--好,我们再来改一下

-- SQL
declare @sql varchar(8000)
set @sql='select bh'
select @sql= @sql+ ',isnull(min(case when gx = ''' + gx + ''' then dept end),'''+''+''') [' + gx + ']' from (select distinct gx from #T) a
set @sql=@sql+' from #T group by bh'
--print @sql
exec (@sql)


/*

bh        01  02  03  04  05  06  07  08 
---------- ---- ---- ---- ---- ---- ---- ---- ----
TMS1056AD  A-a  B-a  C-a  E-a  G-a  D-a     
TMS1058AD                          A-a  D-a  F-a
*/

--看看,这样如何?

--清理环境
drop table #T
心若无尘,一花一世界,一鸟一天堂
 

回复:行列的互换一

楼主,我发现你怎么这么喜欢T_sql?难道你没有为异构数据库的移植伤过脑筋吗?你这样的依赖于特定dbms的sql兼容性太差,我一向不提倡,尽量使用sql99标准中有的那些东西,除非万不得已。
宠辱不惊,看庭前花开花落,去留无意,望天空云卷云舒
 

回复: 行列的互换一



引用:
原帖由 huangshuchun 于 2007-11-2 9:23:00 发表
楼主,我发现你怎么这么喜欢T_sql?难道你没有为异构数据库的移植伤过脑筋吗?你这样的依赖于特定dbms的sql兼容性太差,我一向不提倡,尽量使用sql99标准中有的那些东西,除非万不得已。



因为工作每天面对的就是这个数据库,所以写得多了点呀
心若无尘,一花一世界,一鸟一天堂
 

回复:行列的互换一

楼主对T-SQL的驾驭能力确实令人佩服!
宠辱不惊,看庭前花开花落,去留无意,望天空云卷云舒
 

回复: 行列的互换一

PFPF,呵呵, 我是新手, 新的不能再新了,以后要多多关照我呀, 谢谢
 

回复:行列的互换一

交个朋友好不
 

回复:行列的互换一

在这儿就已经是朋友
心若无尘,一花一世界,一鸟一天堂
 

回复:行列的互换一

没什么异种数据库同种数据库区别。只要是做软件的。没有什么通用的概念。
 
1  /  1  页   1 跳转

版权所有 程序员家园论坛   Sitemap

Powered by Discuz!NT 2.1.202    Copyright © 2001-2008 Comsenz Inc.
Processed in 0.046875 second(s) , 2 queries. 浙ICP备07502118号
返顶部