一个简单的sql语句,请教

jet_u 2003-10-16 09:10:10
有customerno和product两个字段,一个customerno可能对应不同的product字段,想用SQL处理成
cusotomerno product1 product2
每个cusotomerno只能出现一次,该怎么处理,谢谢
...全文
26 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jet_u 2003-10-17
  • 打赏
  • 举报
回复
难道真的没有办法吗?
jet_u 2003-10-17
  • 打赏
  • 举报
回复
我用的是sql 7.0不能create function,有没有更好的方法啊
zjcxc 元老 2003-10-17
  • 打赏
  • 举报
回复
典型的交叉表.

如果生成的横向字段过多,可能导致生成的SQL语句被截断.这种情况可以参考下面的贴子处理:

http://expert.csdn.net/Expert/topic/2303/2303308.xml?temp=.8472406
化解字符串不能超过8000的方法(zjcxc)
lansquenet 2003-10-17
  • 打赏
  • 举报
回复
典型的交叉表的例子,楼主要记住哟
马可最熟这东西了
jet_u 2003-10-17
  • 打赏
  • 举报
回复
多谢各位了。
pengdali 2003-10-16
  • 打赏
  • 举报
回复
上面的例子不是吗?
jet_u 2003-10-16
  • 打赏
  • 举报
回复
可以的
pengdali 2003-10-16
  • 打赏
  • 举报
回复
张三 语文,数学,英语

用的,号分割不行吗?
jet_u 2003-10-16
  • 打赏
  • 举报
回复
但是同一个producnt不止出现一次
insert test values('张三','语文',80)
insert test values('张三','数学',86)
insert test values('张三','英语',75)
insert test values('张三','语文',80)
insert test values('张三','数学',86)
insert test values('张三','英语',75)
insert test values('李四','语文',78)
insert test values('李四','数学',85)
insert test values('李四','英语',78)
可能会向上面那样,而且有些customerno的 product也许只有一个,有些会很多
pengdali 2003-10-16
  • 打赏
  • 举报
回复
Create table test (name char(10),km char(10))
go
insert test values('张三','语文')
insert test values('张三','数学')
insert test values('张三','英语')
insert test values('李四','语文')
insert test values('李四','数学')
insert test values('李四','英语')
go


create function getstr(@content int)
returns varchar(2000)
as
begin
declare @str varchar(2000)
set @str=''
select @str=@str+','+rtrim(km) from test where name=@content
select @str=right(@str,len(@str)-1)
return @str
end
go

--调用:
select name,dbo.getstr(name) km from test group by name
CrazyFor 2003-10-16
  • 打赏
  • 举报
回复

1,建自定义函数
Create function getstr(@id Nchar(100))
returns Nvarchar(4000)
as
begin
declare @str Nvarchar(4000),@分隔符 Nvarchar(10)
set @分隔符=N','
set @str=N''
select @str=@str+rtrim(Col)+@分隔符 from 表名
--------------------------------^^^^要相加的字段名
where 相加条件字段=@id
set @str=left(@str,len(@str)-1)落 ---却除最后一个分隔符
return @str
end
GO

2,调用
select 条件字段,dbo.getstr(条件字段) from 表名 group by 条件字段
txlicenhe 2003-10-16
  • 打赏
  • 举报
回复
举例:
Create table test (name char(10),km char(10),cj int)
go
insert test values('张三','语文',80)
insert test values('张三','数学',86)
insert test values('张三','英语',75)
insert test values('李四','语文',78)
insert test values('李四','数学',85)
insert test values('李四','英语',78)
想得到:
姓名 语文 数学 英语
张三 80 86 75
李四 78 85 78

declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)

--drop table test

34,575

社区成员

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

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