SQL语句3维数据绘制报表,不知道如何写效率好,谢谢!

山豆 2010-12-07 10:19:26
谢谢大家,多多帮忙呀!!!!!

已知原始数据表(款式,颜色,尺码 的3维的一个结构)

款式 颜色 尺码 件数
A 红 X 1
A 红 XL 2
A 红 XXL 3
A 绿 X 4
A 黄 XXL 5
A 黄 XLL 6
B 蓝 120M 7
B 蓝 130M 8
B 紫 120M 9
C 白 X 10
C 白 XL 11


得到下面的数据(报表需要的效果)

字段1 字段2 字段3 字段4 字段5 字段6 字段7 字段8

A 颜色 X XL XXL XLL 合计
A 红 1 2 3 6
A 绿 4 4
A 黄 5 6 11
A 合计 5 2 8 6 21

B 颜色 120M 130M 合计
B 蓝 7 8 15
B 紫 9 9
B 合计 16 8 24

C 颜色 X XL 合计
C 白 10 11 21


注: C款只有一个颜色,所以少一个合计



...全文
202 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
山豆 2010-12-07
  • 打赏
  • 举报
回复
to dawugui


就算这个,我也不太清楚怎么搞,能给我示例一下吗 ?
dawugui 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 suipianwuda 的回复:]
to dawugui

我可以用游标 ,循环做了A,再做B,这样下去

如果如你说的,单独算好办
[/Quote]也只能这样了.
山豆 2010-12-07
  • 打赏
  • 举报
回复
to dawugui

我可以用游标 ,循环做了A,再做B,这样下去

如果如你说的,单独算好办
dawugui 2010-12-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 suipianwuda 的回复:]
to dawugui

我也觉得不合理,但是用户习惯看这样的报表,所以头疼 呀,
有的时候没有办法
[/Quote]如果只单独的算A或B或C可以做到,如果要整合到一起,很难办到.帮顶.
山豆 2010-12-07
  • 打赏
  • 举报
回复
to dawugui

我也觉得不合理,但是用户习惯看这样的报表,所以头疼 呀,
有的时候没有办法
山豆 2010-12-07
  • 打赏
  • 举报
回复
to WaterMM

SELECT 'B','颜色','120M','130M','合计','',''
UNION ALL
select 款式,颜色=ISNULL(颜色,'合计'),
LTRIM(sum(case when 尺码='120M' THEN 件数 else 0 end)),
LTRIM(sum(case when 尺码='130M' THEN 件数 else 0 end)),
LTRIM(sum(件数)),'',''
from #tb


这些是写死的,用不起来呀,数据之前你不知道是那些尺码,都是活的呀
dawugui 2010-12-07
  • 打赏
  • 举报
回复
我觉得楼主的这个思维(或思想)不太对.
这种数据格式即使放在前台也不好处理.
水妹妹 2010-12-07
  • 打赏
  • 举报
回复
写的很弱智
--> 测试数据: #tb
if object_id('tempdb.dbo.#tb') is not null drop table #tb
go
create table #tb (款式 varchar(1),颜色 varchar(5),尺码 varchar(4),件数 int)
insert into #tb
select 'A','红','X',1 union all
select 'A','红','XL',2 union all
select 'A','红','XXL',3 union all
select 'A','绿','X',4 union all
select 'A','黄','XXL',5 union all
select 'A','黄','XLL',6 union all
select 'B','蓝','120M',7 union all
select 'B','蓝','130M',8 union all
select 'B','紫','120M',9 union all
select 'C','白','X',10 union all
select 'C','白','XL',11


SELECT 字段1='A',字段2='颜色',字段3='X',字段4='XL',字段5='XXL',字段6='XLL',字段7='合计'
UNION ALL
select 款式,颜色=ISNULL(颜色,'合计'),
LTRIM(sum(case when 尺码='X' THEN 件数 else 0 end)),
LTRIM(sum(case when 尺码='XL' THEN 件数 else 0 end)),
LTRIM(sum(case when 尺码='XXL' THEN 件数 else 0 end)),
LTRIM(sum(case when 尺码='XLL' THEN 件数 else 0 end)),
LTRIM(sum(件数))
from #tb
where 款式='A'
GROUP BY 款式,颜色
WITH ROLLUP
HAVING(NOT (GROUPING(款式)=1 AND GROUPING(颜色)=1))
union all
SELECT 'B','颜色','120M','130M','合计','',''
UNION ALL
select 款式,颜色=ISNULL(颜色,'合计'),
LTRIM(sum(case when 尺码='120M' THEN 件数 else 0 end)),
LTRIM(sum(case when 尺码='130M' THEN 件数 else 0 end)),
LTRIM(sum(件数)),'',''
from #tb
where 款式='B'
GROUP BY 款式,颜色
WITH ROLLUP
HAVING(NOT (GROUPING(款式)=1 AND GROUPING(颜色)=1))
UNION ALL
SELECT 'C','颜色','X','XL','合计','',''
UNION ALL
select 款式,颜色 ,
LTRIM(sum(case when 尺码='X' THEN 件数 else 0 end)),
LTRIM(sum(case when 尺码='XL' THEN 件数 else 0 end)),
LTRIM(sum(件数)),'',''
from #tb
where 款式='C'
GROUP BY 款式,颜色



字段1 字段2 字段3 字段4 字段5 字段6 字段7
---- ----- ------------ ------------ ------------ ------------ ------------
A 颜色 X XL XXL XLL 合计
A 红 1 2 3 0 6
A 黄 0 0 5 6 11
A 绿 4 0 0 0 4
A 合计 5 2 8 6 21
B 颜色 120M 130M 合计
B 蓝 7 8 15
B 紫 9 0 9
B 合计 16 8 24
C 颜色 X XL 合计
C 白 10 11 21

(11 行受影响)
billpu 2010-12-07
  • 打赏
  • 举报
回复
3d的 貌似很先进呀
山豆 2010-12-07
  • 打赏
  • 举报
回复
报表里面比较死的,数据都是存储过程准备的,我也想放入到前台呀
山豆 2010-12-07
  • 打赏
  • 举报
回复
字段可以定死最多 10个尺码
dawugui 2010-12-07
  • 打赏
  • 举报
回复
你这个字段数量,名称都不一样,也整在一起?还是单独只算A或B或C的?
水族杰纶 2010-12-07
  • 打赏
  • 举报
回复
不同尺码对应的字段都不一致
这类报表觉得放前台处理好点
后台做 就行列转换吧 还要分组
山豆 2010-12-07
  • 打赏
  • 举报
回复
晕, 贴上去 格式有点变化,看的不齐
山豆 2010-12-07
  • 打赏
  • 举报
回复
继续求解!

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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