sum(decode(,'',))怎么对付两个字段?

tangyong_delphi 2008-07-08 07:31:08
sum(decode(,'',))怎么对付两个字段?
字段:形状 Shape,颜色 colour
形状有100种,颜色有50种
select date,sum(decode(Shape,'A1',money))
from company
group by date
可以算出Shape为'A1'的money。
现在要同时按照“形状 Shape,颜色 colour”统计汇总,怎么写SQL语句?最好只用查询!
我可不想把每种Shape,colour都写出来,而且希望能够不统计不存在的Shape和colour!
...全文
1077 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
中国风 2008-07-09
  • 打赏
  • 举报
回复
select ID,sum(decode(Shape,'A1',money,0)) as money2--A1为等于money其它为0
from t1 group by ID;


--合计
select date,shape,colour,sum(money)
from company
group by date,shape,colour;
tangyong_delphi 2008-07-09
  • 打赏
  • 举报
回复
我在网上看到了一个初步的解决方法,但运行代码出错。
http://blog.csdn.net/chqchq/archive/2008/05/22/2468980.aspx
普通行列转换
假设有张学生成绩表(tb)如下:
Name Subject Result
张三 语文  74
张三 数学  83
张三 物理  93
李四 语文  74
李四 数学  84
李四 物理  94
*/

-------------------------------------------------------------------------
/*
想变成
姓名 语文 数学 物理
---------- ----------- ----------- -----------
李四 74 84 94
张三 74 83 93
*/

create table tb
(
Name varchar(10) ,
Subject varchar(10) ,
Result int
)

insert into tb(Name , Subject , Result) values('张三' , '语文' , 74)
insert into tb(Name , Subject , Result) values('张三' , '数学' , 83)
insert into tb(Name , Subject , Result) values('张三' , '物理' , 93)
insert into tb(Name , Subject , Result) values('李四' , '语文' , 74)
insert into tb(Name , Subject , Result) values('李四' , '数学' , 84)
insert into tb(Name , Subject , Result) values('李四' , '物理' , 94)
go

--静态SQL,指subject只有语文、数学、物理这三门课程。
select name 姓名,
max(case subject when '语文' then result else 0 end) 语文,
max(case subject when '数学' then result else 0 end) 数学,
max(case subject when '物理' then result else 0 end) 物理
from tb
group by name
/*
姓名 语文 数学 物理
---------- ----------- ----------- -----------
李四 74 84 94
张三 74 83 93
*/

--动态SQL,指subject不止语文、数学、物理这三门课程。
declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + ' from tb group by name'
exec(@sql)
/*
姓名 数学 物理 语文
---------- ----------- ----------- -----------
李四 84 94 74
张三 83 93 74
*/

我运行代码出错:
SQL> declare @sql varchar(8000)
2 set @sql = 'select Name as ' + '姓名'
3 select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
4 from (select distinct Subject from tb) as a
5 set @sql = @sql + ' from tb group by name'
6 exec(@sql)
7 /

declare @sql varchar(8000)
set @sql = 'select Name as ' + '姓名'
select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']'
from (select distinct Subject from tb) as a
set @sql = @sql + ' from tb group by name'
exec(@sql)

ORA-06550: 第 2 行, 第 9 列:
PLS-00103: 出现符号 "@"在需要下列之一时:
begin function
package pragma procedure subtype type use <an identifier>
<a double-quoted delimited-identifier> form current cursor

weifengxian2 2008-07-09
  • 打赏
  • 举报
回复
LZ,描述得不太清楚吧,没弄清楚你的目的
tangyong_delphi 2008-07-09
  • 打赏
  • 举报
回复
select date, Shape, colour , sum(money)
from company
group by date, Shape, colour
我当然知道可以这么写,但是这么写的语句必须导入Excel中生成数据表,再做成数据透视表,才是我们需要的资料。
我想不用数据透视表,直接生成我们需要的资料。
如果生成的数据表要做成数据透视表,就很没有面子了!
狂风乱影 2008-07-09
  • 打赏
  • 举报
回复
顶一个
HelloWorld_001 2008-07-09
  • 打赏
  • 举报
回复
别人写的,测试通过


--测试数据
create table t (XH varchar2(10), DDATE date, SXF int);
insert into t select 1,sysdate,10 from dual union all
select 1,sysdate+1,14 from dual union all
select 1,sysdate+2,23 from dual union all
select 2,sysdate,21 from dual union all
select 2,sysdate+1,24 from dual union all
select 3,sysdate,13 from dual union all
select 3,sysdate+1,22 from dual;
--
create or replace package sp_test
is
type ResultData is ref cursor;
procedure getRstData( rst out ResultData);
end sp_test;
/
create or replace package body sp_test
is
procedure getRstData( rst out ResultData)
is
begin
declare
cursor cur is select distinct (DDATE) from t;
tmp_ddate date;
str varchar2(4000);
begin
str:='select xh';
open cur;
loop fetch cur into tmp_ddate;
exit when cur%notfound;
str:=str||',sum(decode(to_char(ddate,''yyyymmdd''),'||chr(39)||to_char(tmp_ddate,'yyyymmdd')||chr(39)||',sxf,0)) "'||to_char(tmp_ddate,'yyyymmdd')||'"';
end loop;
str:=str||' from t group by xh';
-- dbms_output.put_line(str);
close cur;
open rst for str;
end;
end;
end sp_test;
/
--输出结果
1 10 14 23
2 21 24 0
3 13 22 0
tangyong_delphi 2008-07-09
  • 打赏
  • 举报
回复
http://blog.csdn.net/chqchq/archive/2008/05/22/2468980.aspx 的标题是“ Oracle中纵表转横表(行列转换)示例”。

oracle 不确定列的行列转换,怎么做,谢谢!
HelloWorld_001 2008-07-09
  • 打赏
  • 举报
回复
你找的那个是sql server的,当然出错了


你想问的是不是 oracle 不确定列的行列转换?
mantisXF 2008-07-08
  • 打赏
  • 举报
回复

select date,
sum(money)
from company
group by date,
shape,
colour;

oraclelogan 2008-07-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 tangyong_delphi 的帖子:]
sum(decode(,'',))怎么对付两个字段?
字段:形状 Shape,颜色 colour
形状有100种,颜色有50种
select date,sum(decode(Shape,'A1',money))
from company
group by date
可以算出Shape为'A1'的money。
现在要同时按照“形状 Shape,颜色 colour”统计汇总,怎么写SQL语句?最好只用查询!
我可不想把每种Shape,colour都写出来,而且希望能够不统计不存在的Shape和colour!
[/Quote]

楼主,应该是统计存在的shape和colour吧!

试下如下命令:
select date,sum(decode(Shape,'A1',money))
from company
group by date,shape,colour
hebo2005 2008-07-08
  • 打赏
  • 举报
回复
你这不如用
select date,sum(money)
from company
group by date,shape,colour

一般DCODE用在行列转换的比较多
课程亮点: 从无到有、手把手教你编写CA/TA,快速上手,快速部署项目标准的开发,开发一套CA/TA,可部署到不同的TEE OS上。受益人群: 汽车行业主机厂、tier1、SOC芯片公司的安全部门同事手机行业,ODM/OEM、SOC芯片公司的安全部门同事学生课程收益: 熟悉CA/TA开发的步骤和流程。快速上手,快速搭建自己开发环境。熟悉各类TEE、基于各类TEE的CA/TA开发步骤。搭建自己的安全平台熟悉各类常规安全应用熟悉tee密码学算法、tee存储  课程大纲  Hello大家好,上架一门新的视频课程,课程主要包含两大部分,第一部分搭建环境,第二部分从无到有的编写代码。带领大家手把手编写。 具体大纲如下:(1)qemu v8环境搭建- 搭建一个qemu_v8的环境,用于跑BL1-->BL2-->BL31-->BL32-->BL33-->Linux kernel;- 直接使用已搭建好的镜像- 工程使用以及说明(2)CA/TA开发编程实践从无到有编写代码,已完成的大纲如下:- 2秒钟快速编写(clone)一组CA/TA程序- 安全存储详解以及代码示例- CA到TA双向传参数的四种方式(value、temref、memref),区别?优缺点?- 对称密码学算法aes的使用,CBC/ECB/CTR/XTS分组密码的使用,加密解密,pending等- aeskey的操作,如何随机生成aeskey(TEE_GenerateKey),objectHandle和aesbuf有什么区别? 如何将handle- 认证加密算法,如aes-GCM的使用- 非对称密码学算法RSA的使用,包括加密、解密、签名、验签- RSA key的处理,包含如何生成RSA KEY,rsakey object如何转换成可见的数组,如何转换der,如何转换pem,反向又如何转换- ECC/ECDSA的使用- 国密sm2 sm3 sm4的使用.  其中sm4包含加密、解密、签名、验签等- encode和decode的实现- TA属性的定制以及API的使用- 数字摘要  SHA1 sha224 sha256 sha384 sha512等- 消息认证码 HMAC- TEE侧获取时间的函数有哪些(TEE_GetSystemTime、TEE_GetREETime),有什么区别?分别是怎样使用的? - 如何获取随机数(TEE_GenerateRandom)?- TA调用TA的示例和演示后续可能继续补充的如下(也欢迎大家提需求):- multi-session和multi-instance的使用- CA LOGIN flag的使用 

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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