Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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_Database - Fatal编程技术网

SQL-如何按行数仅选择特定行之前的行

SQL-如何按行数仅选择特定行之前的行,sql,database,Sql,Database,我很难构造SQL查询来将文件加载到数据库中 假设我的文件如下所示: col1 col2 col3 col4 a b c d e f g h end null null null no interesting data here not interested in this bla bla bla bla 我只想选择“结束”行之前的行。因此: col1 c

我很难构造SQL查询来将文件加载到数据库中

假设我的文件如下所示:

col1  col2        col3 col4
a     b           c    d
e     f           g    h
end   null        null null
no    interesting data here
not   interested  in   this
bla   bla         bla  bla
我只想选择“结束”行之前的行。因此:

col1  col2        col3 col4
a     b           c    d
e     f           g    h
对于我的应用程序来说,结尾行及其后的行都不有趣。对于我们需要加载的每个文件,结束行的行号不同。所以我不能用计数器或最上面的语句来做这个

我该怎么办

我想我需要在WHERE条款中注意以下事项:

SELECT *
FROM data
WHERE rownumber < endrownumber
我被困的地方如下:

如何查找col1='end'作为endrownumber的rownumber 如何仅选择rownumber
T

以下内容将得到您想要的结果:

WITH view_1 AS (
    SELECT
        ROW_NUMBER() OVER(
            ORDER BY
                col_1
        ) AS row_num,
        col_1,
        col_2,
        col_3,
        col_4
    FROM
        your_table
)
SELECT
    *
FROM
    view_1
WHERE
    row_num < (
        SELECT
            row_num
        FROM
            view_1
        WHERE
            col_1 = 'end'
    );
我已经创建了一个视图,它将为每一行提供一个行号,并显示为一个新列

然后就在下面查询视图,以检查col_1上面的行号是什么,col_1='end'

然后,它将只通过比它小的行


我正在使用Oracle完成上述所有工作,并按预期工作。

您提到这是一个文件。我想你是在把它插入数据库?你到底是如何读取文件的?提示:当你在最后一行打上句号时,只需用你正在使用的数据库停止标记你的问题。