标题:分享行列转换
取消只看楼主
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
 问题点数:0 回复次数:1 
分享行列转换

table1
====================================
c_b c_c1 c_c2
--------------------------------
A a<>k1 a<>k3
B b<>k1 c<>k1
A a<>k1 e<>k2
B d<>k3 d<>k2
=====================================
table_2
c_A c_B c_1 c_2
---------- ---------- ---------- ----------
k1 A a
k1 B b c
k2 A e
k2 B d
k3 A a
k3 B d
如何由table1生成table2???

实现

if object_id('shiyan') is not null
drop table shiyan
go
create table shiyan(col1 varchar(10),col2 varchar(10),col3 varchar(10))
insert into shiyan select 'A','a<>k1','a<>k3'
insert into shiyan select 'B','b<>k1','c<>k1'
insert into shiyan select 'A','a<>k1','e<>k2'
insert into shiyan select 'B','d<>k3','d<>k2'

--以上是生成表

declare @s table(col1 varchar(10),col2 varchar(10),col3 varchar(10),id int) --定义表变量,增加id列便于行列转换
declare @i int
set @i=1
while @i<=(select count(1) from shiyan)
begin
set nocount on
insert into @s select col1,right(col2,2),left(col2,1),1 as id from shiyan
insert into @s select col1,right(col3,2),left(col3,1),2 as id from shiyan
set @i=@i+1
end
set rowcount 0
select col2 as c_A,col1 as c_B ,max(case id when 1 then col3 else ' ' end) as c_1,max(case id when 2 then col3 else ' ' end) as c_2 from @s group by col1,col2

结果
c_A c_B c_1 c_2
---------- ---------- ---------- ----------
k1 A a
k1 B b c
k2 A e
k2 B d
k3 A a
k3 B d

我想不到用一句实现的,如果大家能一句实现的话,希望贴出答案

[此贴子已经被作者于2007-2-11 23:18:27编辑过]

搜索更多相关主题的帖子: 行列 分享 
2007-02-11 23:14
棉花糖ONE
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:2987
专家分:0
注 册:2006-7-13
得分:0 

set rowcount 0
你在这句后面加一句select * from @s
看看输出结果,然后和最后的table2比较,
我只是照着我自己的理解来写的,那人也没说要做什么


26403021 sql群 博客 blog./user15/81152/index.shtml
2007-02-12 09:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-120669-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024326 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved