SQL。我需要向列中的每个值追加一组字符串
我正在使用Microsoft SQL Server管理Studio 08 我有一个查询,它将一组表合并到两列中。A列中的用户代码列表和B列中的to字母代码列表SQL。我需要向列中的每个值追加一组字符串,sql,sql-server,Sql,Sql Server,我正在使用Microsoft SQL Server管理Studio 08 我有一个查询,它将一组表合并到两列中。A列中的用户代码列表和B列中的to字母代码列表 ColA ColB user1 aa user1 ab user2 aa user2 cc 因此,这表示每个用户都可以访问哪些系统。但我需要将国家代码附加到这些代码中的每一个,然后才能将其插入到另一个表中。如果我有五个国家: 即,GB,IT,FR,美国 我想将上面的第一行替换为: ColA ColB user1
ColA ColB
user1 aa
user1 ab
user2 aa
user2 cc
因此,这表示每个用户都可以访问哪些系统。但我需要将国家代码附加到这些代码中的每一个,然后才能将其插入到另一个表中。如果我有五个国家:
即,GB,IT,FR,美国
我想将上面的第一行替换为:
ColA ColB
user1 IE.aa
user1 GB.aa
user1 IT.aa
user1 FR.aa
user1 US.aa
等等,我可以很容易地把所有这些国家放在一个单独的表中,如果这样做更容易的话
亲切问候,,
Colm如果用户、代码和国家之间有一对一的对应关系,这是一件容易的事情
SELECT ColA, CONCAT(ColB, '.', ColC) as identifier
FROM SourceTable
将SourceTable替换为您的表,并添加国家代码列并将其命名为colC。或者用你的名字来代替ColC
编辑如下:用户和代码之间采用一对一的对应关系,但用户和国家/地区采用一对多的对应关系,请尝试以下操作:
Users
---------------------
UserID
UserCode
Countries
----------------------
CountryCode
UserID
(国家/地区中的UserID是Users中UserID的外键。)然后查询如下:
Select u.UserID, CONCAT(u.UserCode, '.', c.CountryCode) AS result
FROM Users u
JOIN Countries c
ON c.UserID = u.UserID
将“结果”列命名为更具描述性的列如果按照您的示例,每个国家都将与每个用户关联,那么这将起作用。您只需创建一个单独的
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
如果您试图实现的是每个国家/地区每个用户的条目,则可以
将国家/地区列表交叉应用到用户表:
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
它是用户和代码之间的一对一,而不是国家之间的一对一。因此,对于每个用户/代码组合,都需要添加72个国家/地区标记。啊,是的,好的。这看起来像是我要做的。我要试一试。谢谢,我有一张绿色支票:)