Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 拖车记录中的行计数_Sql_Oracle_Count - Fatal编程技术网

Sql 拖车记录中的行计数

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'

我需要创建一个文本文件,其中包含一个标题行、多个数据行(一旦我将其投入使用,可以是任意数量的行),以及一个包含最终行号(即数据行数)的尾行,再加上2(标题和尾行)

我已经能够通过以下查询获得所需的结果,但我想知道是否有更有效的方法来处理该任务

我的测试查询:

--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
从双)


共享并享受。

我看不出您当前的查询有任何问题。我会添加字段名,但从功能上看,这里没有问题。