我们如何在 sql 中使用 2 列的差异值进行 TOP 查询

How do we use 2 column's difference value for TOP query in sql

我想从 Table A 生成 N 行。 其中 N 是 table.

中所有记录的 column2-column1 与 Table A 的差异

我不想为此使用循环。

示例查询

Select TOP (tbl1.Column2 - tbl1.Column1) tbl1.Column3, tbl2.Column1 
from TableA tbl1 cross join
     TableB tbl2
where tbl1.ID= 10

但这给了我以下错误

The reference to column "Column2" is not allowed in an argument to a TOP, OFFSET, or FETCH clause. Only references to columns at an outer scope or standalone expressions and subqueries are allowed here.

执行此操作的替代方法是什么?

通常,您会使用 TOPORDER BY

在任何情况下,您都可以使用 window 函数做您想做的事:

select column3, column1
from (select (tbl1.Column2 - tbl1.Column1) as numrows,
             tbl1.Column3, tbl2.Column1,
             row_number() over (order by (select null)) as seqnum 
      from TableA tbl1 cross join
           TableB tbl2
      where tbl1.ID = 10
     ) t
where seqnum <= numrows;

您可以尝试将差异移动到子查询中,然后从中选择顶部:

Select TOP DiffColumn, Column3, Column1
From (Select (tbl1.Column2 - tbl1.Column1) as DiffColumn, tbl1.Column3, tbl2.Column1 
from TableA tbl1 cross join
 TableB tbl2
where tbl1.ID= 10)

此外,您在原始查询中的 tbl1.Column3 之前缺少逗号。

I want to generate N number of rows from Table A. where N is difference of column2- column1 from

表示 N=diff。 col1 和 col2 是 wrong.Becasue 它又是 return 多行。 你非常具体。像 max(col2)-max(col1)。即解释如何计算 col1 和 col1 的差异。

Declare @diff int=10
declare @t table(col1 int)
insert into @t VALUES(1)
select * from @t A
cross apply(select distinct number from master..spt_values where  number>0 and  number<=@diff)ca

or

select top (@diff)* from @t A