Sql 拖车记录中的行计数
我需要创建一个文本文件,其中包含一个标题行、多个数据行(一旦我将其投入使用,可以是任意数量的行),以及一个包含最终行号(即数据行数)的尾行,再加上2(标题和尾行) 我已经能够通过以下查询获得所需的结果,但我想知道是否有更有效的方法来处理该任务 我的测试查询:Sql 拖车记录中的行计数,sql,oracle,count,Sql,Oracle,Count,我需要创建一个文本文件,其中包含一个标题行、多个数据行(一旦我将其投入使用,可以是任意数量的行),以及一个包含最终行号(即数据行数)的尾行,再加上2(标题和尾行) 我已经能够通过以下查询获得所需的结果,但我想知道是否有更有效的方法来处理该任务 我的测试查询: --SINGLE HEADER ROW SELECT 'PH3', to_char('10000000') FROM DUAL UNION ALL --MULTIPLE DATA ROWS SELECT 'PD3', 'NO SSN'
--SINGLE HEADER ROW
SELECT 'PH3', to_char('10000000')
FROM DUAL
UNION ALL
--MULTIPLE DATA ROWS
SELECT 'PD3', 'NO SSN'
FROM students s
WHERE s.schoolid = '999999'
UNION ALL
--SINGLE TRAILER ROW
SELECT 'PT3', to_char(count(*)+2)
FROM students s
WHERE s.schoolid = '999999'
我已经能够通过以下查询获得所需的结果,但我想知道是否有更有效的方法来处理该任务
据我所知,除了UNION-ALL
将以任何特定顺序生成行之外,没有任何地方记录过它。即使它今天看起来总是像你期望的那样工作
至于我自己,我会考虑,如果没有一个特定的<代码> >按< /COD>子句,任何集合操作都会产生无序的结果。 因此,为了您(或某个未来的维护人员)的安宁,我将明确地进行订购。可能效率不高,但可以保证按预期顺序输出行:
SELECT "col1", "col2" FROM (
SELECT 0 as "position", 'PH3' as "col1", to_char('10000000') as "col2"
FROM DUAL
UNION ALL
--MULTIPLE DATA ROWS
SELECT 1, 'PD3', 'NO SSN'
FROM students s
WHERE s.schoolid = '999999'
UNION ALL
--SINGLE TRAILER ROW
SELECT 2, 'PT3', to_char(count(*)+2)
FROM students s
WHERE s.schoolid = '999999'
) ORDER BY "position";
而且,如果你真的想摆脱这两个
SELECT
拥有相同WHERE
子句,也许你可以使用一个CTE
WITH data AS (SELECT 'NO SSN'
FROM students s
WHERE s.schoolid = '999999')
SELECT "col1", "col2" FROM (
SELECT 0 as "position", 'PH3' as "col1", to_char('10000000') as "col2"
FROM DUAL
UNION ALL
--MULTIPLE DATA ROWS
SELECT 1, 'PD3', 'NO SSN'
FROM data
UNION ALL
--SINGLE TRAILER ROW
SELECT 2, 'PT3', to_char(count(*)+2)
FROM data
) ORDER BY "position";
可以使用ROWNUM获取查询生成的行的最终计数,如下所示:
SELECT rectype,
case
when rectype <> 'PT3' THEN ssn
else to_char(rownum, 'TM9')
end as ssn
FROM
(--SINGLE HEADER ROW
SELECT 'PH3' as rectype, to_char('10000000') as ssn
FROM DUAL
UNION ALL
--MULTIPLE DATA ROWS
SELECT 'PD3' as rectype, 'NO SSN' as ssn
FROM students s
WHERE s.schoolid = '999999'
UNION ALL
--SINGLE TRAILER ROW
SELECT 'PT3' as rectype, NULL as ssn
FROM DUAL)
SELECT rectype,
案例
当重新键入“PT3”时,则为ssn
else到_char(rownum,'TM9')
以ssn结束
从…起
(-)单标题行
选择“PH3”作为重类型,选择_char('10000000')作为ssn
来自双重
联合所有
--多个数据行
选择“PD3”作为重类型,“无SSN”作为SSN
来自学生的
其中s.schoolid='999999'
联合所有
--单拖车排
选择“PT3”作为重类型,选择NULL作为ssn
从双)
共享并享受。我看不出您当前的查询有任何问题。我会添加字段名,但从功能上看,这里没有问题。