ROWS 1 TO 5
ORDER BY语句将返回的记录以DISCOUNT的降序排列,而ROWS语句将返回的记录数量限制为前五个。尽管你可以独立使用ROWS而没有ORDER BY,但是那样没有什么意义,因为限制返回行的数量就意味着你需要以某种顺序排列的前N个记录。如果你需要返回的第一行就是结果记录集的第一行,你可以把上面的查询简写为:
SELECT * FROM SALES
ORDER BY DISCOUNT DESC
ROWS 5
如果你希望ORDER BY语句中具有相同列值的行都作为前五行显示,你可以使用WITH TIES选项:
SELECT * FROM SALES
ORDER BY DISCOUNT DESC
ROWS 1 TO 5 WITH TIES
该查询将返回8行而不是5行,因为前五行的DISCOUNT字段中的某些数据也出现在其它行中。注意,使用WITH TIES时必须同时使用ORDER BY。
除了固定数量的列,你也可以指定返回结果数据集里一定百分比的行数。如下例所示,它将返回SALES中TOTAL_VALUE在前10%内的记录:
SELECT * FROM SALES
ORDER BY TOTAL_VALUE DESC
ROWS 10 PERCENT
PERCENT选项另一个有趣的应用是选择一个平均分布的行子集。 下面的查询返回五行,每个行与它的邻居在表中的距离都是20%的记录数。尽管该查询没有使用ORDER BY,但是使用ORDER BY也是可以的。例如,要获得根据地理位置均匀分布的行,就可以根据州名或ZIP来排序表格。
SELECT * FROM CUSTOMER
ROWS 100 BY 20 PERCENT
ROWS语句可以和统计值联合使用。下面的查询根据各销售人员的定单总额排序而返回前三个销售人员的信息。第二个查询根据各销售人员的定单总额返回前25%的销售人员信息:
SELECT SALES_REP, SUM(TOTAL_VALUE) AS TOTAL
FROM SALES
GROUP BY SALES_REP
ORDER BY 2 DESC
ROWS 3
SELECT SALES_REP, SUM(TOTAL_VALUE) AS TOTAL
FROM SALES
GROUP BY SALES_REP
ORDER BY 2 DESC
ROWS 25 PERCENT
ROWS语句可以和UPDATE合用,来给工资最高的前10名员工加工资:
UPDATE EMPLOYEE
SET SALARY = SALARY * 1.01
ORDER BY SALARY DESC
ROWS 10
你也可以将ROWS与DELETE合用,来删除工资最高的前10名员工。如果你还想删除那些与前10名员工工资一样的员工,只要加入WITH TIES选项:
DELETE FROM EMPLOYEE
ORDER BY SALARY DESC
ROWS 10
以XML格式导出数据
InterBase Express现在包含一个新的类,TIBOutputXML,让你轻松地以XML来读取数据。下表中列出了TIBOutputXML的属性。要使用这个类,你必须在文件中包含IBXML单元。InterBase XML支持是以独立的DLL实现的,所以如果你不需要该功能,也就不用分发该文件。
属性
描述
HeaderTag
XML流中作为头部标记的字符串。如果它为空,那么就使用"<?xml version="1.0">"作为缺省值。
DatabaseTag
作为数据库标记的字符串。如果为空,就使用"Database"。
TableTag
作为表格标记的字符串。如果为空,就使用"Table"。
RowTag
作为行标记的字符串。如果为空,就使用"Row"。
Flags
有三个成员的属性集。
xmlAttribute:以属性生成XML而不是标记;
xmlDisplayNull:在XML数据中包含空值;
xmlNoHeader:在XML中不要包含头信息。
Stream
接收XML的流。
下面的代码演示了如何导出到XML并将XML显示在DELPHI表单里的一个备注控件里:
procedure TMainForm.ShowXMLBtnClick(Sender: TObject);
var
IBOutputXML: TIBOutputXML;
上一页 [1] [2] [3] 下一页 没有相关教程
|