2016-04-25 51 views
1

我正在使用Micorsoft SQL Server管理工作室08SQL。我需要将一组字符串附加到列中的每个值

我有一个查询将一堆表一起拉入2列。用户码在A列的列表和以字母代码在B列的列表

ColA  ColB 

user1 aa 

user1 ab 

user2 aa 

user2 cc 

因此,这代表着什么系统中,每个用户具有访问权限。但是,我需要将国家/地区代码附加到这些代码中,然后才能将其插回到其他表格中。所以,如果我有五个国家:

IE,GB,IT,FR,美国

我还想从上面替换第一行有:

ColA  ColB 

user1 IE.aa 

user1 GB.aa 

user1 IT.aa 

user1 FR.aa 

user1 US.aa 

等了对方唯一的用户/代码组合。如果这样做更容易,我可以将所有这些国家放在单独的表格中。

亲切的问候, 科尔姆

回答

1

如果你有一个用户,法规和国家之间的一一对应,这是一个容易的事。

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

将SourceTable替换为您的表,并添加一个国家/地区代码列并将其命名为colC。或者用你的名字替换ColC。

编辑如下:与用户和代码之间的一一对应关系,而是一对多与用户和国家试试这个:

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


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

(用户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

好吧,我要编辑我的答案 – quest4truth

1

如果按照你的榜样,每一个国家将是一个贴合每个用户,然后这将工作。您只需要创建一个单独的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

我可以有一个绿色检查:) –

相关问题