SQL知识总结

来源:互联网 发布:域名企业代备案 编辑:程序博客网 时间:2024/06/08 07:18

1.分组Group By,用到Group By的时候前面必须要有函数sum,avg,等

SELECT ORGNO,corpno, sum(LCREVAMT),sum(OCREVAMT),sum(ccrevamt),sum(inwardamt),sum(lcpayamt),

sum(icpayamt),sum(outwardamt)  FROM INTER_selectCorpStat

GROUP BY ORGNO,corpno

2.视图会随着表数据的更新而更新

 

3.无锡报表“各网店外汇数据一览表”

WITH

SXFSRZCNY as

(SELECT sum(F_EXCHANGERATE(b.FINISHEDDATE,a.TOCURSIGN,'CNY',a.TOAMT)) as sxfAmt,b.TRANSACTORGNO FROM BU_CHARGEINFO a,BU_TRANSACTIONINFO b,PA_ACCTTYPE c

WHERE a.TXNSERIALNO = b.TXNSERIALNO

AND a.TOACCTTYPENO =c.ACCTTYPENO

AND c.ACCTTYPENAME NOT LIKE '%保函%'

GROUP BY b.TRANSACTORGNO

),

BHSRZCNY as

(SELECT sum(F_EXCHANGERATE(b.FINISHEDDATE,a.TOCURSIGN,'CNY',a.TOAMT)) as bhAmt,b.TRANSACTORGNO FROM BU_CHARGEINFO a,BU_TRANSACTIONINFO b,PA_ACCTTYPE c

WHERE a.TXNSERIALNO = b.TXNSERIALNO

AND a.TOACCTTYPENO =c.ACCTTYPENO

AND c.ACCTTYPENAME LIKE '%保函%'

GROUP BY b.TRANSACTORGNO

),

croptable as (

SELECT SXFSRZCNY.TRANSACTORGNO FROM SXFSRZCNY

UNION ALL

SELECT BHSRZCNY.TRANSACTORGNO FROM BHSRZCNY

),

JB AS(SELECT croptable.TRANSACTORGNO,

SXFSRZCNY.sxfAmt as sxfAmt,

BHSRZCNY.bhAmt as bhAmt

FROM  croptable

LEFT JOIN SXFSRZCNY ON croptable.TRANSACTORGNO=SXFSRZCNY.TRANSACTORGNO

LEFT JOIN BHSRZCNY ON croptable.TRANSACTORGNO=BHSRZCNY.TRANSACTORGNO

)

select DISTINCT c.sxfAmt,c.bhAmt,b.orgname,b.ORGNO from JB c,pa_org b

where c.TRANSACTORGNO=b.orgno

 

4.

四种数据库(SqlServer/Oracle/Mysql/Sybase)查询前N条数据,或者查询中间N条数据的方法。对四种数据库的语法进行一下简单的分析。属于初级教程,高手请自动跳过。以后也会写一些连贯性的渐渐深入的东西。例如,下一篇就会和这篇有关。会写些常用的分页SQL写法,里面就会使用到今天写的,查询前N条或者中间N条的方法。之后再深入到分页存储。接下来也会写一些,异构数据库的语法分析系列,针对很多朋友,同事,客户经常问到的一些问题做一个整理,一方面备忘,一方面给更多的朋友提供交流学习的机会。

进入正题,MSSQL查询前10条的方法为:

selecttop X*from table_name--查询前X条记录,可以改成需要的数字。

selecttop n*from (selecttop m*from table_nameorderby column_name ) aorderby column_namedesc--查询第NM条记录。常用的分页也是这种方式。

例如常用的分页方式:

declare@pageint

declare@rowint

set@page=2--页数

set@row=3--每页展示行数

selecttop (@row)*from (selecttop (@row*@page)*from table_nameorderby id ) aorderby iddesc--最基本的分页方式,改变@row@page达到分页效果

MYSQL查询前10条的方法:

select*from table_name limit0,10--通常0是可以省略的,直接写成 limit 100代表从第0条记录后面开始,也就是从第一条开始

select*from table_name limit1,10--则为从第一条后面的记录开始展示,也就是说从第二条开始。

ORACLE查询前十条的方法:

select*from table_namewhere rownum<X--X为前多少条记录

select*from (select a.*,a.rownum rn fromselect*from table_name a where a.rownum<M)where rn>n--这句就是从nm也的数据,分为三层结构

 

5.DISTINCT 用法

SELECT DISTINCT b.TXNSERIALNO,b.TRADENO FROM BU_TRANSACTIONINFO b WHERE b.FILENO = 'CP12020314343428161'  ORDER BY TXNSERIALNO DESC

 

6.增加字段

-- Add/modify columns

alter table FI_LONGTERMSELLREMITINFO add bizDepAmt  DECIMAL (15,2);

-- Add comments to the columns

comment on column FI_LONGTERMSELLREMITINFO.bizDepAmt

is '实收保证金折业务币别总金额';

commit;

 

7.修改表的字段类型

ALTER TABLE "GJYW"."BU_TALLYRECORDINFO"

  ALTER COLUMN "IBSERIALNO"

    SET DATA TYPE VARCHAR (20);

 

8.字符串连接

UPDATE PA_LETTERTYPE SET TRADENO ='0'||TRADENO

 

9.TRUNC的用法,得到当前系统的日期

SELECT TRUNC(SYSDATE) FROM BU_TRANSACTIONTMP

 

10.查询字符串长度小于4的记录

SELECT spEconZoneCorpType FROM PA_CORP WHERE  length(CORPATTRIBUTE) < 4

 

11.字符串拼接

UPDATE PA_CORP SET CORPATTRIBUTE = '0'||CORPATTRIBUTE WHERE  length(CORPATTRIBUTE) < 4

 

12.to_date用法

SELECT to_date('2012-6-15','yyyy-MM-dd') FROM dual

 

原创粉丝点击