SQL

2017-06-22 5 views
0

Ich habe die Aussage:SQL

SELECT col_a, col_b, col_c from database.table sample 50; 

Ich möchte meine Ausgabe wie folgt aussehen:

id col_a col_b col_c 
1 data goes here 
2 data goes here 
3 data goes here 
4 data goes here 
5 data goes here 
6 data goes here 

Grundsätzlich - Ich brauche eine Spalte für id zu erstellen, die beginnt, bei 1 und Auto-Inkremente mit jeder Zeile, die abgerufen wird.

Wie mache ich das?

+0

Sie möchten diese Sequenz zum Ergebnis von SAMPLE hinzufügen? Soll das von irgendeiner der Säulen bestellt werden? – dnoeth

+0

es ist nur "Probe 50", weil die tatsächliche Tabelle ist wie 5.000.000 Zeilen und ich möchte nicht alle von ihnen ziehen. In diesem Fall, da wir bei 50 Datensätzen stehen, möchte ich, dass die Zeilen buchstäblich zwischen 1 und 50 liegen. Ich möchte nicht, dass sie von irgendetwas "geordnet" wird - die erste Zeile sollte 1 sein, die zweite sollte 2 sein. usw. –

+0

Warum wollen Sie diese Zeilen nummerieren, gibt es keine Bedeutung? – dnoeth

Antwort

2

Wenn Sie tatsächlich die abgetasteten Zeilen nummeriert:

SELECT ROW_NUMBER() OVER (ORDER BY some_field), 
    dt.* 
FROM 
(
    SELECT col_a, col_b, col_c 
    FROM database.table 
    SAMPLE 50 
) AS dt 

Statt SAMPLE Sie auch TOP verwenden könnte, aber dann zufällig ist es nicht mehr.

+0

Ich sehe - wenn ich 'SAMPLE' nehme (von meiner ursprünglichen Abfrage +' ROW_NUMBER() OVER (ORDER BY a2unterstütztes_Datum DESC) AS ID, '), es geht näher gerade ab 1 - aber es fehlen noch Nummern. In meiner Testabfrage, die "SAMPLE 500" entfernt, fragt mich Teradata bei 2.000 Zeilen, ob ich die Abfrage stoppen möchte, zu der ich ja sage - die ID-Spalte endet bei "2028", gibt aber "2000" -Reihen zurück. Irgendeine Idee warum das ist? Wie, ich habe 'ID' # 2014, aber nicht 2015, 2016 oder 2017, aber dann habe ich 2018 .... –

+0

@BrianPowell: Haben Sie meine verschachtelte Abfrage ausgeführt? 'SAMPLE' ist getan ** nach ** der' ROW_NUMBER', deshalb brauchen Sie eine abgeleitete Tabelle. – dnoeth

+0

Ja, diese verschachtelte Abfrage funktioniert gut für die 'sample' oder die' topn' Syntax. Danke! Dauerte eine Weile, um meine ursprüngliche Abfrage neu zu formatieren :) –

0

können Sie row_number() verwenden:

select row_number() over (order by ??) as id, col_a, col_b, col_c 
from t; 

Die ?? stellt die Spalte/Ausdruck der die Bestellung für den id gibt.

+0

Hmm ... Ich kann diese Funktion machen, indem ich etwas wie SELECT ROW_NUMBER() OVER (ORDER BY some_field ASC) als ID verwende - aber ich bin mir nicht sicher, wie ich das anfangen soll an '1' und gehe zu' n' –