交叉表查询问题

dododo 2002-11-22 03:38:44
在sql2000中,如何实现交叉查询
例:

用户购买信息
create table buyinfo(
username varchar(10), --用户名称
procductname varchar(20), --用户购买的产品名称
)
还有一张产品信息登记表
create table procduct(
procedurtname varchar(20)
)
产品表是由可以新增和删除的
数据如下
username procductname
张山 电视
张山 冰箱
张山 电话
李四 冰箱
李四 电话
王五 冰箱

想实现如下查询结果:
冰箱 电话 电视
张山 1 1 1
李四 1 1 0
王五 1 0 0

我想了好久,只想到用存储过程和临时表来解决,但速度很慢,不知那位大侠可以用一句sql就搞定,谢谢。
...全文
53 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlhl 2002-11-22
  • 打赏
  • 举报
回复
收藏!
brook_huang 2002-11-22
  • 打赏
  • 举报
回复
上面的兄弟的思路是对的
dododo 2002-11-22
  • 打赏
  • 举报
回复
接受答案了,谢谢 j9988(j9988)
j9988 2002-11-22
  • 打赏
  • 举报
回复
动态SQL语句.
declare @sql varchar(4000)
set @sql='select username,'

select @sql=@sql+'sum(case when procductname='''+procedurtname+'''
then 1 else 0 end) as '+procedurtname+',' from procduct

set @sql=left(@sql,len(@sql)-1)+'from buyinfo group by username'

exec(@sql)
dododo 2002-11-22
  • 打赏
  • 举报
回复
to :j9988(j9988)
可是产品是可以新增和删除的。
j9988 2002-11-22
  • 打赏
  • 举报
回复
select
username,
sum(case when procductname='电视' then 1 else 0 end) as 电视,
sum(case when procductname='冰箱' then 1 else 0 end) as 冰箱,
sum(case when procductname='电话' then 1 else 0 end) as 电话
from buyinfo group by username

34,594

社区成员

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

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