Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL。我需要向列中的每个值追加一组字符串_Sql_Sql Server - Fatal编程技术网

SQL。我需要向列中的每个值追加一组字符串

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

我正在使用Microsoft SQL Server管理Studio 08

我有一个查询,它将一组表合并到两列中。A列中的用户代码列表和B列中的to字母代码列表

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个国家/地区标记。啊,是的,好的。这看起来像是我要做的。我要试一试。谢谢,我有一张绿色支票:)