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--查询第N到M条记录。常用的分页也是这种方式。
例如常用的分页方式:
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 10。0代表从第0条记录后面开始,也就是从第一条开始
select*from table_name limit1,10--则为从第一条后面的记录开始展示,也就是说从第二条开始。
ORACLE查询前十条的方法:
select*from table_namewhere rownum<X--X为前多少条记录
select*from (select a.*,a.rownum rn from(select*from table_name) a where a.rownum<M)where rn>n--这句就是从n到m也的数据,分为三层结构
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