2017-05-29 1 views
0

Ich möchte N Anzahl der Zeilen aus Tabelle A generieren. wobei N ist die Differenz von Spalte2-Spalte1 von Tabelle A für alle Datensätze in der Tabelle.Wie verwenden wir 2 Spalte Differenz Wert für TOP-Abfrage in Sql

Ich möchte keine Schleifen dafür verwenden.

Beispielabfrage

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

aber das gibt mir unter Fehler

Der Verweis auf die Spalte "Column2" zu einem TOP in einem Argument nicht erlaubt ist, OFFSET oder Klausel FETCH. Hier sind nur Verweise auf Spalten in einem äußeren Bereich oder eigenständige Ausdrücke und Unterabfragen zulässig.

Was ist die Alternative, dies zu tun?

Antwort

0

Normalerweise würden Sie TOP mit ORDER BY verwenden.

In jedem Fall können Sie tun, was Sie Fensterfunktionen sollen mit:

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

Danke. Das hat für mich funktioniert. –

0

Sie können versuchen, den Unterschied in einer Unterabfrage dann Bewegen der Spitze aus, dass die Auswahl:

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) 

Auch In der ursprünglichen Abfrage fehlte ein Komma vor tbl1.Column3.

0

Ich möchte, eine Anzahl von N Zeilen aus Tabelle A erzeugen, wobei N Differenz von column2- column1 von

sagen, dass N = diff ist. von col1 und col2 ist falsch.Besuchen Sie es wieder viele Zeilen zurück. Sie hv zu b sehr spezifisch. wie max (col2) -max (col1) .i.e erklären, wie man diff von col1 und col1 berechnet.

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 
Verwandte Themen