2016-04-25 6 views
1

私はMicorsoft SQL Server Managment Studio 08を使用しています。SQL。列の各値に文字列のセットを追加する必要があります

テーブルの束を2つの列にまとめるクエリがあります。列Aのユーザーコードのリストと

ColA  ColB 

user1 aa 

user1 ab 

user2 aa 

user2 cc 

だから、これはシステムの各ユーザーがアクセス権を持っているものを表す列Bの文字コードのリスト。しかし、別のテーブルに戻す前に、これらのコードのそれぞれに国番号を付ける必要があります。だから私は5カ国があった場合:

IE、GB、IT、FR、米国

イドなどで上から最初の行を置き換えるには:

ColA  ColB 

user1 IE.aa 

user1 GB.aa 

user1 IT.aa 

user1 FR.aa 

user1 US.aa 

そしてそうにお互いのユニークなユーザーのために/ Code combo。私はこれらの国々を別のテーブルに簡単に置くことができます。あなたは、ユーザー、コードと国との間に1対1の対応がある場合

種類よろしく、 コルム

答えて

1

は、それが行う簡単なことです。

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

SourceTableをテーブルに置き換え、国コード列を追加してcolCとします。または、ColCの名前を変更してください。ユーザーとのコード間の1対1の対応ではなく、ユーザーと国との多くの1つは、これを試してください:

編集は以下の

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


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

(国におけるユーザーIDは、ユーザーがユーザーIDへの外部キーです。)次に、クエリは次のようになります:あなたの例のように、すべての国があることを行っている、場合

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

名「結果」欄は

+0

その間でユーザーとコードの間一から一ではなく、各国。したがって、各ユーザ/コードのコンボには、追加する必要がある72カ国のタグがあります。 – user183200

+0

OK、私は自分の答えを編集しません – quest4truth

1

よりわかりやすいしますすべてのユーザーにttachedすれば、これはうまくいくでしょう。すべての国を保持するために別のcountryテーブルを作成するだけです。

;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

何を達成しようとしていることは、ユーザーテーブルに国のリストをcross applyすることができ、国ごと、ユーザーごとのエントリである場合:

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

ああそうです。これは私が大丈夫にしようとしているように見えます。私はそのショットを与えるでしょう。おかげで – user183200

+0

私は緑のチェックを持つことができます:) –

関連する問題