2017-05-29 244 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