sql group by
group by主要是用来分组的,怎么个分组呢?
以下用两个例子说明两个使用方面,1是合理的返回合计值(防止笛卡尔积现象),2是用分组来找出重复的记录
====================================================================
★★★例子1:假如有这么一个表:tab_1,它有两个字段:xm、gzlb、je(姓名、工资类别、金额),具体数据如下:
xm```````gzlb`````````je
-----------------------------------------
张三`````养老金`````1000
张三`````护理费`````200
张三`````其他```````50
.............
李四`````养老金`````800
李四`````其他```````50
.............
王五`````养老金`````900
王五`````其他```````35
可以看出每个人的工资都是按类别存放的,如果要返回合计的数据,如:
张三``````1250
李四``````850
王五``````935
该怎么写SQL呢?初学者往往会这么写:select xm, sum(je) from tab_1;但结果会是什么样呢?结果将是:
张三``````1250
张三``````850
张三``````935
李四``````1250
李四``````850
李四``````935
王五``````1250
王五``````850
王五``````935
这是将全部字段都进行了所有的排列组合,即:笛卡尔积!要防止这个情况的发生,我们就可以用到group by(分组)了!
select xm, sum(je)
from tab_1
group by xm;
上面的SQL指定了用xm字段分组,这样一来就返回出正确的结果了:
张三``````1250
李四``````850
王五``````935
====================================================================
★★★例子2:假设又有这么一个表:tab_2,有这些字段:bh, xm, dah,……(编号、姓名、档案号、……),
比如有这样的情况:向该表录入数据的人员非常不认真,重复录入了不少数据,如:
bh``````xm```````dah
------------------------
1```````张三`````10001
2```````李四`````10002
3```````王五`````10003
………………
84``````张三`````10001
85``````赵六`````10004
………………
126`````王五`````10003
可以看出张三、王五各重复了一次,假设这个表有几万条数据,那么要查出究竟有多少重复的,该怎么查呢?
select bh, xm, dah
from tab_2
group by xm, sfzh
having count(*) >= 2;
返回值为:
bh``````xm```````dah
------------------------
1``
相关文档:
create or replace view pxfy_view as
select t1.form_id,t1.reserve as mid,t1.feiyong,t.cjpxr_name as full_name,1 as pxlx,t1.topic,t1.identity,
t1.begin_time as CREATEDATE,t1.end_time as completedate,pv.city,pv.DEPT_ID
from wf_oa_pxnb_cjry t,WF_OA_PX ......
一、常用数据类型:
Number:数字类型
Int:整数型
Pls_integer:整数型,产生溢出的错误
Binary_integer:整数型
Char:定长字符,最长255个字符
Varchar2:变长字符,最长2000个字符
Long:变长字符,最长2GB
Date:日期型
Boolean:布尔型
二、定义常量
格式:常量名 constant &nbs ......
我今天学习了sql语句的常用函数,是冯威老师讲的,我做了简单的笔记:
一,SQL函数:
1. 大小写转换函数
lower 转成小写
upper 大写
initcap 将字符串的(每个单词的)第一个字母变为大写,后面的小写
select initcap('huangHY') from dual
&n ......
sqldataadapter适合用在查询较多字段时.....
string sou = "select * from art where content like '%" + TextBox1.Text + "%'";
SqlDataAdapter da = new SqlDataAdapter(sou, conn);
DataSet ds = new DataSet();
da.Fill(ds);
if (ds.Tables[0].rows.count==0)
{
Response.Write("没有记录!");
}
else
{
......
(1)SQL方法(1)
select convert(varchar(5),dateadd(hour,number,cast('00:00' as datetime)),108)+'~'+
convert(varchar(5),dateadd(hour,number+1,cast('00:00' as datetime)),108) as [date]
from master..spt_values
where type = 'P' and
number <= 23
(2)SQL方法(2)
得出一天的时间段记录。(如&nb ......