2017-01-21 4 views
0

Ich möchte eine eindeutige Nummer, basierend auf Zustand und Anzahl, wie oft eine Spalte erzeugen, enthält, diegenerieren berechnete Spalte mit row_number() über Partition von

in Datenbank gekommen ist Es ist wie

Ny_1 
Ny_2 
St_1 
Ny_3 
St_2 
Up_1 
Ny_4 

Und so weiter ...

ich eine persistente berechnete Spalte wollen

Andere Spalte muss wie

sein
Name | state | total | ticket no 
Abc | Ny  | 1  | Ny_1 
Cda. | Ny  | 2  | NY_2 
Xyz. | St  | 1  | ST_1 

Ich kann diese Partition in einer Ansicht generieren, indem mithilfe von und das Ergebnis

verketten Aber ich bin nicht sicher, ob ich eine berechnete Spalte basiert auf row_number() über (Partition durch etwas, um von etwas schaffen kann)

Nur 2-Frage

1) kann ich Partition in einer berechneten Spalte

2) gibt es einen besseren Ansatz verwenden

(Update von Kommentaren :)

die Spalte Schau, die ich herausstellen zu erzeugen versuche der Primärschlüssel sein ... alle anderen Spalte mit ihm angebracht werden ... Es ist Geschäftsanforderung. .. Es muss nur auf diese Weise gemacht werden ...

Ich muss eine Ticketnummer in der Datenbank generieren, die wie folgt sein sollte ... State_number of tickets im state_ Dies ist die Nummer, an die die Datenbank angehängt wird .

Es ist eine Excel-Tabelle, die ich in SQL-Tabelle konvertieren ... Und es ist die Ticket-Nummer, über die ich spreche ... muss auf diese Weise generiert werden.

+0

Können Sie das Tabellenschema anzeigen und genau angeben, nach was Sie partitionieren möchten und nach welcher Reihenfolge? – SqlZim

+0

Es ist eine Excel-Tabelle, die ich in SQL-Tabelle konvertieren soll ... Und es ist die Ticket-Nummer, über die ich spreche ... es muss auf diese Weise generiert werden – Vikram

Antwort

0

In Computed column können wir nicht window Funktionen verwenden, stattdessen können Sie gehen für View

CREATE VIEW state_num 
AS 
    SELECT state, 
     seq_state = state 
        + Cast(Row_number()OVER(partition BY state ORDER BY state) AS VARCHAR(50)) 
    FROM yourtable 

Wenn Sie SQL SERVER 2012 verwenden und oben dann CONCAT Funktion benutzen, die nicht explizit Umwandlung erfordert.

CREATE VIEW state_num 
AS 
    SELECT state, 
     seq_state = Concat(state, Row_number()OVER(partition BY state ORDER BY state)) 
    FROM yourtable 
+0

Schauen Sie sich die Spalte, die ich versuche zu generieren wird die primäre sein Schlüssel ... die ganze andere Spalte mit angehängt werden ... Es ist Geschäftserfordernis ... Es muss nur so gemacht werden ... Bitte helfen Sie mir – Vikram

+0

@Vikram - Wie bereits erwähnt, können Sie 'row_number' nicht verwenden Fensterfunktion in 'Berechnete Spalte' –

+0

Ich habe die Frage aktualisiert .... Bitte helfen Sie mir, wie soll ich es tun ... In der Datenbank nur nicht in Sicht – Vikram

0

Frage 1) Kann ich [Fensterfunktion mit] partition [durch] in einer berechneten Spalte?

Antwort: Ja, durch eine Funktion mit dem Wert zurückzukehren, aber nichtpersisted, weil es nicht-deterministisch sein würde.

Frage 2) Gibt es einen besseren Ansatz?

Antwort: Ja, das sollte nicht der Primärschlüssel sein.

Warum möchten Sie, dass dies Ihr Primärschlüssel ist?

Zu sagen, dass dies eine Geschäftsanforderung ist, macht es nicht eine gute Idee. Finden Sie einen anderen Weg, um Ihren Geschäftsanforderungen gerecht zu werden, ohne dass Sie in schreckliche Designentscheidungen gezwungen werden.