2017-05-29 250 views
0

我要生成表A. 行的N个,其中N是表中的所有记录从表A column2- COLUMN1的差异。我们如何使用TOP查询2列的差值在SQL

我不想使用循环这一点。

示例查询

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

,但是这给了我下面的错误

参考列“列2”不是一个参数传递给一个TOP允许,OFFSET,或FETCH子句。在外部 范围或独立的表达式和子查询列仅引用在这里允许的。

什么是备用做到这一点?

回答

0

通常情况下,你可以使用TOPORDER BY

在任何情况下,你可以做你想做使用的是什么窗口功能:

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; 
+0

感谢。这对我有效。 –

0

您可以尝试移动差为子查询然后从选择上:

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之前缺少逗号。

0

我要生成从表A行的N个,其中N是从

column2- COLUMN1的 差话说N = DIFF。 col1和col2是错误的。再次重新返回许多行。 你hv非常具体。如max(col2)-max(col1).i.e解释如何计算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<[email protected])ca 

or 

select top (@diff)* from @t A