2016-04-25 3 views
1

Ich benutze Microsoft SQL Server Management Studio 08SQL. Ich muss eine Reihe von Zeichenfolgen an jeden Wert in einer Spalte anhängen

Ich habe eine Abfrage, die eine Reihe von Tabellen zusammen in 2 Spalten zieht. Eine Liste von Benutzercodes in Spalte A und eine Liste der zu Buchstaben-Codes in Spalte B

ColA  ColB 

user1 aa 

user1 ab 

user2 aa 

user2 cc 

So repräsentiert das, was Systeme jeden Benutzer Zugriff hat. Aber ich muss jedem dieser Codes Ländercodes beifügen, bevor ich sie wieder in eine andere Tabelle einfügen kann. Also, wenn ich fünf Länder hatte:

IE, GB, IT, FR, US

Id wie die erste Reihe ersetzen von oben mit:

ColA  ColB 

user1 IE.aa 

user1 GB.aa 

user1 IT.aa 

user1 FR.aa 

user1 US.aa 

Und so weiter für jeden anderen Benutzer/Code combo.Ich kann alle diese Länder in einer separaten Tabelle leicht genug haben, wenn das es einfacher macht.

Mit freundlichen Grüßen, Colm

Antwort

1

Wenn Sie eine Eins-zu-Eins-Entsprechung zwischen den Nutzern, Codes und Ländern haben, ist es eine einfache Sache zu tun.

SELECT ColA, CONCAT(ColB, '.', ColC) as identifier 
FROM SourceTable 

Ersetzen Sie SourceTable mit Ihrer Tabelle und fügen Sie eine Ländercode-Spalte hinzu und nennen Sie sie colC. Oder ersetzen Sie ColC mit allem, was Sie ihm nennen.

bearbeiten folgt: Mit einer Eins-zu-Eins-Entsprechung zwischen den Benutzern und Codes, aber man viele mit den Nutzern und Länder versuchen Sie dies:

Users 
--------------------- 
UserID 
UserCode 


Countries 
---------------------- 
CountryCode 
UserID 

(. UserID in Ländern ist ein Fremdschlüssel für Benutzer-ID in Users) dann geht man Abfrage wie folgt:

Select u.UserID, CONCAT(u.UserCode, '.', c.CountryCode) AS result 
FROM Users u 
JOIN Countries c 
ON c.UserID = u.UserID 

Namen der Spalte „Ergebnis“ etwas mehr beschreibend

+0

Its a 12.59 zwischen Benutzern und Codes, aber nicht zwischen Länder. Für jeden Benutzer/Code-Combo gibt es also 72 Länder-Tags, die angehängt werden müssen. – user183200

+0

OK, ich bearbeite meine Antwort – quest4truth

1

sein Wenn, wie pro Ihr Beispiel wird jedes Land ein sein würde Für jeden Benutzer würde dies funktionieren. Sie müssen nur einen separaten country Tisch für alle Länder erstellen.

;with cte_users (ColA, ColB) 
AS 
(
    -- Whatever your current query is 
) 
SELECT u.ColA, c.country_code + '.' + u.ColB 
FROM cte_users u 
INNER JOIN country c 
ON 1 = 1 
0

Wenn das, was Sie versuchen, ein Eintrag pro Benutzer pro Land zu erreichen, ist Ihnen die Länderliste auf der Benutzertabelle cross apply kann:

CREATE TABLE #country (code CHAR(2)) 

INSERT INTO #country 
     (code) 
VALUES ('IE'),('GB'),('IT'),('FR'),('US') 

CREATE TABLE #user (name VARCHAR(50), usercode VARCHAR(10)) 
INSERT INTO #user 
     (name, usercode) 
VALUES ('user1', 'aa') 

SELECT 
u.name, c.code + '.' + u.usercode 
FROM #user u 
CROSS APPLY #country c 
+0

Ahh ja ok. Das sieht so aus, als würde ich versuchen, alles in Ordnung zu bringen. Ich gebe das eine Chance. Danke – user183200

+0

Kann ich einen grünen Scheck haben :) –

Verwandte Themen