这样的表格如何得到呢?

dm1cyg 2006-01-10 10:22:23
我有个表记录

结构如下:
-----------------------------------------------------------
商品名称 单价 数量 类别 采购单位
-----------------------------------------------------------
cpu 1500 2 电脑类 科技大厦
内存条 100 1 电脑类 电脑公司
cpu 1000 1 电脑类 科技大厦
油笔 5 5 日常类 日用品公司
电脑书 45 10 书籍类 书店
笔记本 100 1 日常类 电脑公司

.....
------------------------------------------------------------------
我想得到如下汇总

采购单位 电脑类 日常类 书籍类
科技大厦 3000 100 0
电脑公司 100 100 0
......
类别有字典表






...全文
126 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dm1cyg 2006-01-10
  • 打赏
  • 举报
回复
关键是我的类别有很多,能从类别表里提出俩组合吗?
比如
-------------------------------------、
电脑类 日常类 书籍类..........后的是从类别表里提出的
dm1cyg 2006-01-10
  • 打赏
  • 举报
回复
那么我怎么统计本月的呢我的表里有进货日期
mislrb 2006-01-10
  • 打赏
  • 举报
回复
交叉表已經有很多例子了,為什麼還有這麼多人問呢?

我覺得CSDN的搜索要改進改進,要搜的搜不到,不要的搜到一大把
-狙击手- 2006-01-10
  • 打赏
  • 举报
回复
给一个例子:
--测试数据
create table scores(货物ID int,供应商 varchar(10),采购数量 int)
go
insert into scores
select 1,'AAA',10 union
select 1,'BBB',30 union
select 2,'AAA',15 union
select 2,'BBB',40 union
select 2,'CCC',60 union
select 2,'DDD',70

go


declare @s varchar(8000)
set @s=''
select @s=@s+',[供应商'+dt+']=sum(case 供应商 when '''+dt+''' then 采购数量 else 0 end)'
from(select distinct dt= 供应商 from scores)a

exec('select 货物id'+@s+' from scores group by 货物id')
go

--删除测试
drop table scores

/*

货物id 供应商AAA 供应商BBB 供应商CCC 供应商DDD
----------- ----------- ----------- ----------- -----------
1 10 30 0 0
2 15 40 60 70

*/
子陌红尘 2006-01-10
  • 打赏
  • 举报
回复
create table t(商品名称 varchar(20),单价 int,数量 int,类别 varchar(20),采购单位 varchar(20))
insert into t select 'cpu ',1500,2 ,'电脑类','科技大厦'
insert into t select '内存条',100 ,1 ,'电脑类','电脑公司'
insert into t select 'cpu ',1000,1 ,'电脑类','科技大厦'
insert into t select '油笔 ',5 ,5 ,'日常类','日用品公司'
insert into t select '电脑书',45 ,10,'书籍类','书店'
insert into t select '笔记本',100 ,1 ,'日常类','电脑公司'


declare @s varchar(8000)
set @s='select 采购单位'
select @s=@s+',['+类别+']=sum(case 类别 when '''+类别+''' then 单价 else 0 end)'
from t group by 类别 order by 类别
set @s=@s+' from t group by 采购单位 order by 采购单位'
exec(@s)

/*

采购单位 电脑类 日常类 书籍类
--------- -------- -------- --------
电脑公司 100 100 0
科技大厦 2500 0 0
日用品公司 0 5 0
书店 0 0 45
*/

drop table T
子陌红尘 2006-01-10
  • 打赏
  • 举报
回复
declare @s varchar(8000)
set @s='select 采购单位'
select @s=@s+',['+类别+']=sum(case 类别 when '''+类别+''' then 数量 else 0 end)'
from 表 group by 类别 order by 类别
set @s=' from 表 group by 采购单位 order by 采购单位'
exec(@s)

34,588

社区成员

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

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