我们如何在 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.
执行此操作的替代方法是什么?
通常,您会使用 TOP
和 ORDER 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
我想从 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.
执行此操作的替代方法是什么?
通常,您会使用 TOP
和 ORDER 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