zjcxc(邹建)上午的语句有变动

ADWARDS00 2003-12-26 02:16:09
具体请看http://expert.csdn.net/Expert/topic/2604/2604582.xml?temp=.9685022
上午字段2的数据是纯数字的,但是现在出现类似 1200X300 这样的数据,储存过程就不能执行了
...全文
35 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ADWARDS00 2003-12-26
  • 打赏
  • 举报
回复
晕~强,能不能给解释一下啊
declare @s varchar(8000)
set @s=''
select @s=@s+',['+b+']=MAX(CASE b when '''+b+''' THEN cast(c as varchar) else '''' END)'
from(select distinct b from 表) a
exec('SELECT a'+@s+' FROM 表 GROUP BY a ORDER BY a')
zjcxc 元老 2003-12-26
  • 打赏
  • 举报
回复
--下面是测试

--测试数据
create table 表(a varchar(3),b varchar(20),c int)
insert 表
select 'aaa','1001 x 100',1465
union all select 'bbb','1002 x 300',1124
union all select 'ccc','1003 x 100',1257
union all select 'ddd','1004',4855
union all select 'aaa','1004',1144
go

--查询处理
declare @s varchar(8000)
set @s=''
select @s=@s+',['+b+']=MAX(CASE b when '''+b+''' THEN cast(c as varchar) else '''' END)'
from(select distinct b from 表) a
exec('SELECT a'+@s+' FROM 表 GROUP BY a ORDER BY a')
go

--删除测试表
DROP TABLE 表

/*--测试结果

a 1001 x 100 1002 x 300 1003 x 100 1004
---- ---------------- ---------------- ---------------- ----------------
aaa 1465 1144
bbb 1124
ccc 1257
ddd 4855

--*/

zjcxc 元老 2003-12-26
  • 打赏
  • 举报
回复
--改成这样就行了.:

declare @s varchar(8000)
set @s=''
select @s=@s+',['+b+']=MAX(CASE b when '''+b+''' THEN cast(c as varchar) else '''' END)'
from(select distinct b from 表) a
exec('SELECT a'+@s+' FROM 表 GROUP BY a ORDER BY a')
zjcxc 元老 2003-12-26
  • 打赏
  • 举报
回复
我再看看.

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧