2017-05-29 2 views
0

テーブルAからN個の行を生成したいとします。 ここでNは表のすべてのレコードのTable2のcolumn2-column1の差です。私はどのように2列の差分値をSQLのTOPクエリに使用するのですか

私はこのためにループを使いたくありません。

サンプルクエリ

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

が、これはエラーの下に私を与え

コラム「列2」への言及は、OFFSET、TOPの引数に許可、または句を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

Iは、NはそのN =差分を言っ

からcolumn2- COLUMN1の 差である表Aから行のN個の数を生成します。 col1とcol2の間違っています。それは再び多くの行を返します。 あなたは非常に特異的なhvになります。 max(col2)-max(col1).i.eのようにcol1とcol1のdiffを計算する方法を説明します。

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 
関連する問題