在ANSI方式下,必须进行显示地提交才能完成一个交易。
利用WITH BY进行数据小计
WITH BY的主要特点包括:
A. 它为明细数据表创建分类小计。
B. 跟GROUP BY不同的是,WITH BY没有剔除明细记录,而是在明细记录后面按照分类增加小计行。
C. 可以允许多于一个字段进行小计,即小计当中可以嵌套小计。
D. 输出结果将根据BY后面的所有字段自动进行排序。
E. 它是Teradata的一个扩展特性。
举例:
1. WITH BY, WITH和ORDER BY的联合使用:
SELECT last_name AS NAME
,salary_amount AS SALARY
,department_number AS DEPT
FROM employee
WITH SUM (SALARY) BY DEPT
WITH SUM (SALARY) (TITLE 'GRAND TOTAL')
ORDER BY NAME;
结果如下:
NAME SALARY DEPT
Kanieski 29250.00 301
Stein 29450.00 301
-------------
Sum (SALARY) 58700.00
Johnson 36300.00 401
Trader 37850.00 401
-------------
Sum (SALARY) 74150.00
Ryan 31200.00 403
Villegas 49700.00 403
-------------
Sum (SALARY) 80900.00
-------------
GRAND TOTAL 213750.00
2. WITH和GROUP BY的联合使用:
SELECT department_number (TITLE 'dept_no')
,SUM (salary_amount)
,AVG (salary_amount)
FROM employee
GROUP BY department_number
WITH SUM (salary_amount) (TITLE 'GRAND TOTAL')
,AVG (salary_amount) (TITLE '')
ORDER BY department_number;
结果如下:
dept_no SUM (salary_amount) AVG (salary_amount)
301 58700.00 29350.00
401 74150.00 37075.00
403 80900.00 40450.00
--------------------- ----------------------
GRAND TOTAL 213750.00 35635.00
www.2cto.com
集合操作
集合操作主要包括:合并操作(UNION)、相交操作(INTERSECT)和排外操作(EXCEPT)
Teradata的集合操作与标准ANSI集合操作的不同之出在于返回结果的重复记录处理上。在ANSI标准中集合操作将重复记录自动剔除,而Teradata增加了ALL关键词,ALL关键词允许保留重复记录。
我们将有关集合操作的一些补充规则列举如下:
1. 在子查询中不能使用集合操作
2. 在定义视图时不能使用集合操作
3. 不能包含WITH或WITH BY子句
4. 集合操作的优先级为:INTERSECT第一,其后分别为UNION和 EXCEPT,从左到右。可以使用括号改变优先级。
5. 每一个SELECT语句必须有一个FROM <表名>的子句
6. 每个单独的SELECT语句中可以使用GROUP BY
7. Group By不能用于或影响整个返回结果集
8. 重复记录将会抛弃,除非使用ALL选项
www.2cto.com
字符串函数
SUBSTRING函数:用来从字符串中析取一个子字符串,其格式为:
SUBSTRING (<字符串表达式> FROM <开始位置> [ FOR <长度> ])
如:
SELECT SUBSTRING('catalog' FROM 5 FOR 3);
结果为log。
字符串合并:字符串合并的符号是"||",它把两个字符串串联成一个字符串。其基本格式为:
<字符串1> || <字符串2>
INDEX (字符串定位函数):INDEX用来在一个字符串中定位一个子串的开始位置。如下面的例子:
SELECT INDEX('abc', 'b'); 返回结果2
CASE 表达式
A. 基于值(Valued)的CASE语句,例如:
SELECT SUM(
CASE department_number
WHEN 401 THEN salary_amount
ELSE 0
END) / SUM(salary_amount)
FROM employee;
B. 基于搜索(Searched)的CASE语句,例如:
SELECT last_name,
CASE
WHEN salary_amount < 30000
THEN 'Under $30K'
WHEN salary_amount < 40000
THEN 'Under $40K'
WHEN salary_amount < 50000
THEN 'Under $50K'
ELSE
'Over $50K'
END
FROM employee
ORDER BY salary_amount;
C. NULLIF表达式
NULLIF实际上用来作为CASE语句在某种情况下的缩写,其格式为:
NULLIF ( , )
规则是:
如果表达式1等于表达式2,则返回NULL
如果表达式1不等于表达式2,则返回表达式1的值。
例:
SELECT call_number
,labor_hours (TITLE 'ACTUAL HOU