Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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 server 子查询的行数()问题_Sql Server - Fatal编程技术网

Sql server 子查询的行数()问题

Sql server 子查询的行数()问题,sql-server,Sql Server,在下面的示例中,无法按字段_2子查询进行排序 有解决办法吗 SELECT * FROM ( SELECT Field_A, (SELECT Field_1 FROM Table_2) AS Field_B, Field_C, ROW_NUMBER() OVER (ORDER BY Field_B ASC) AS Row_Num FROM Table_1 ) AS Name WHERE Row_Num BETWEEN 1 AND 100 您不能使用别

在下面的示例中,无法按字段_2子查询进行排序 有解决办法吗

SELECT * FROM ( SELECT Field_A, (SELECT Field_1 FROM Table_2) AS Field_B, Field_C, ROW_NUMBER() OVER (ORDER BY Field_B ASC) AS Row_Num FROM Table_1 ) AS Name WHERE Row_Num BETWEEN 1 AND 100
您不能使用别名,您必须在order by上使用该子查询

   with cte as (
        SELECT
        Field_A,
        (SELECT Field_1 FROM Table_2
        ) AS Field_B, --- it should have to rerun 1 value otherwise it will thrown error , so i think here need where condition
        Field_C       
        FROM Table_1
         ) , cte2 as    
         ( select *, row_number() over(order by Field_B asc) rn
           from cte
          ) select * from cte where rn>=1 and rn<=100

不能在声明的同一select子句中使用别名。 您可以按照Zaynul Abadin Tuhin的回答重复子查询,或者使用另一个派生表或cte:

SELECT *
FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY Field_B ASC) AS Row_Num
    FROM
    (
        SELECT
        Field_A,
        (SELECT Field_1 FROM Table_2) AS Field_B,
        Field_C
        FROM Table_1
    ) AS Name
) As NumberedName
WHERE Row_Num BETWEEN 1 AND 100
另外,请注意,除非表_2只有一行,否则使用表_2中的SELECT字段_1作为子查询将导致错误-

子查询返回了多个值。当子查询在=、!=、=或者当子查询用作表达式时


正如Larnu在评论中指出的那样。

您不能在同一个查询中使用别名,字段B是一个别名,相反,您可以通过从表2中选择字段1进行排序,因为字段B也会产生错误,因为子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。除非表_2中只有一行,并且在itApart中只有一行来自排序,否则该查询根本不会运行。您会给出一些示例数据和您正在尝试做的事情吗。@Larnu我认为这只是为了简化,但您当然是正确的。@ZoharPeled可能会首先显示OP得到的错误,因为它将在解析查询时生成。然而,我给出的错误只有在它运行并且DBMS在子查询中找到超过1行时才会发生。因此,OP很可能不知道他们可能会遇到另一个错误。这真的会运行吗?哦,我的第五次回答是另一个错误:这个查询不会运行。@CetinBasoz您可能想进一步解释为什么它不会运行,而不是说它不会运行。这对OP或回答者没有帮助。@CetinBasoz让OP正确地发布了示例数据,意思是DDL+DML,我本来有机会在发布之前检查我的回答。我在更新中删除了字段_C之后有一个不应该出现的逗号,当然还有我已经解决的子查询问题。假设表_2只有一行,这将运行查看,所以我真的不知道您认为我的答案有什么错误。第1/2部分@CetinBasoz好吧,我有多个数据库,配置表中只有一行,这里很可能就是这种情况。此外,Larnu在评论中承认了我们正在讨论的子查询错误,我也从这个答案的第一个版本开始承认了这个错误——在任何情况下,OP都不会问这个问题。显然,问题的答案不是示例代码带来的问题,而是您不能在声明的同一select子句中引用别名。Part 2/2@CetinBasoz我同意忽略子查询错误的答案是错误的,然而,我的回答从来没有忽略它——相反——我引用了Larnu的评论,并在评论中添加了该部分,以及如果表只包含一行,则规则的例外情况。所以,IMHO,否决这个答案,因为它不会运行是错误的。它不应该运行,它应该向OP展示如何处理他们提出的问题。另外,请注意,在OP的实际代码中可能不存在子查询问题-请参阅我对该问题的评论。