GROUP BY 条件子句 依据指定的字段,将具有相同数值的记录合并成一条。SELECT fieldlist FROM table WHERE criteria GROUP BY groupfieldlist fieldlist 欲读取的字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP合并使用) table 被查询的表格名称。 groupfieldlist 分组记录的字段名称,到多10个字段,而这些字段的顺序决定最高到最低的分组层次。 例如: SELECT 姓名,Count(姓名)AS 职员姓名 FROM 职员表格 WHERE 部门名称='业务部' GROUP BY 姓名
我三个表的结构如下: tplan_sp: create table tplan_sp(ITEM_ID VARCHAR2(16) not null,/*项目编号*/ UNIT_ID NUMBER(4) not null,/*负责单位*/ ITEM_NAME VARCHAR2(256) not null,/*项目名称*/ CONTENT VARCHAR2(1024),/*研究内容*/ PLAN_END VARCHAR2(24),/*结束时间*/ PLAN_FUND NUMBER(20,4),/*计划总资金*/ ht_id varchar2(20),/*合同号*/ money number(8,1),/*合同总金额*/ ITEM_STATE_ID NUMBER(4) not null,/*进度情况*/ MEMO VARCHAR2(256),/*备注*/ file_link varchar2(60),/*合同文档*/ PRINCIPAL VARCHAR2(128),/*项目负责人*/ PLAN_BEGIN VARCHAR2(24),/*开始时间*/ SPECIALTY_ID NUMBER(4),/*专业类别*/ xm_sort varchar2(10),/*类目*/ STATE VARCHAR2(16),/*记录状态*/ primary key(ITEM_ID)); tab_year: create table tab_year ( xm_number varchar2(16),/*项目编号*/ UNIT_ID NUMBER (4) , /*负责单位*/ xm_year varchar(8),/*年度*/ jh_money number(8,1),/*年度计划资金*/ ht_money number(8,1),/*年度合同资金*/ sy_money number(8,1),/*年度实用资金*/ primary key(xm_number,xm_year)); tunit: create table tunit ( UNIT_ID NUMBER (4) not null, UNIT_NAME VARCHAR2 (256) , unit_short varchar2(20) , POSTCAL NUMBER (8), TELPHONE VARCHAR2 (32), fax VARCHAR2 (32), address VARCHAR2 (256), STATE VARCHAR2 (16), primary key(unit_id) );
read oracle sql reference and take some practices
select a.xm_year, sum(a.jh_money), sum(a.ht_money), sum(a.sy_money), a.xm_number, b.money, b.PLAN_FUND, b.ITEM_NAME, c.UNIT_NAME from tab_year a, tplan_sp b, tunit c where a.xm_number=b.ITEM_ID and a.UNIT_ID=c.UNIT_ID group by a.xm_year , a.xm_number , b.money, b.PLAN_FUND, b.ITEM_NAME, c.UNIT_NAME order by a.xm_number asc, a.xm_year desc
依据指定的字段,将具有相同数值的记录合并成一条。SELECT fieldlist
FROM table
WHERE criteria
GROUP BY groupfieldlist
fieldlist
欲读取的字段名称。(可与ALL,DISTINCT,DISTINCTROW,或TOP合并使用)
table
被查询的表格名称。
groupfieldlist
分组记录的字段名称,到多10个字段,而这些字段的顺序决定最高到最低的分组层次。
例如:
SELECT 姓名,Count(姓名)AS 职员姓名
FROM 职员表格
WHERE 部门名称='业务部'
GROUP BY 姓名
参与分组的col可以有多个
能举个(可与ALL,DISTINCT,DISTINCTROW,或TOP合并使用)具体的例子吗?
能详细点吗?
tplan_sp:
create table tplan_sp(ITEM_ID VARCHAR2(16) not null,/*项目编号*/
UNIT_ID NUMBER(4) not null,/*负责单位*/
ITEM_NAME VARCHAR2(256) not null,/*项目名称*/
CONTENT VARCHAR2(1024),/*研究内容*/
PLAN_END VARCHAR2(24),/*结束时间*/
PLAN_FUND NUMBER(20,4),/*计划总资金*/
ht_id varchar2(20),/*合同号*/
money number(8,1),/*合同总金额*/
ITEM_STATE_ID NUMBER(4) not null,/*进度情况*/
MEMO VARCHAR2(256),/*备注*/
file_link varchar2(60),/*合同文档*/
PRINCIPAL VARCHAR2(128),/*项目负责人*/
PLAN_BEGIN VARCHAR2(24),/*开始时间*/
SPECIALTY_ID NUMBER(4),/*专业类别*/
xm_sort varchar2(10),/*类目*/
STATE VARCHAR2(16),/*记录状态*/
primary key(ITEM_ID));
tab_year:
create table tab_year
(
xm_number varchar2(16),/*项目编号*/
UNIT_ID NUMBER (4) , /*负责单位*/
xm_year varchar(8),/*年度*/
jh_money number(8,1),/*年度计划资金*/
ht_money number(8,1),/*年度合同资金*/
sy_money number(8,1),/*年度实用资金*/
primary key(xm_number,xm_year));
tunit:
create table tunit
(
UNIT_ID NUMBER (4) not null,
UNIT_NAME VARCHAR2 (256) ,
unit_short varchar2(20) ,
POSTCAL NUMBER (8),
TELPHONE VARCHAR2 (32),
fax VARCHAR2 (32),
address VARCHAR2 (256),
STATE VARCHAR2 (16),
primary key(unit_id)
);
sum(a.jh_money),
sum(a.ht_money),
sum(a.sy_money),
a.xm_number,
b.money,
b.PLAN_FUND,
b.ITEM_NAME,
c.UNIT_NAME
from tab_year a,
tplan_sp b,
tunit c
where a.xm_number=b.ITEM_ID
and a.UNIT_ID=c.UNIT_ID
group by
a.xm_year ,
a.xm_number ,
b.money,
b.PLAN_FUND,
b.ITEM_NAME,
c.UNIT_NAME
order by
a.xm_number asc,
a.xm_year desc
为什么GROUP BY中包括了b.money,b.PLAN_FUND?