请原谅标题,我不确定如何准确描述下面的情况...
我有2张桌子。第一个表中的一列具有一组逗号分隔的代码,这些代码位于第二个表中。所以,这两个表看起来像这样:
Table1
RepID | RepDate | RepLocation
1 1/1/2010 BH,,,,AH,,,
2 2/1/2010 ,,,,,AH,,,
Table2
LocID | LocName
BH Bliss Hall
AH Agans Hall
我可以使用连接从两个表中成功选择,我显然在结果集中得到多行:
RepID | RepDate | RepLocation
1 1/1/2010 Bliss Hall
1 1/1/2010 Agans Hall
2 2/1/2010 Agans Hall
但我真正想做的是得到一个看起来像这样的结果:
RepID | RepDate | AllRepLocations
1 1/1/2010 Bliss Hall Agans Hall
2 2/1/2010 Agans Hall
我之前从未尝试过这样做,如果有可能的话,我很难用T-SQL来获得这个结果。我正在调用一个存储过程,所以如果我需要做一些额外的编码或阴谋来获得我想要的结果,这不是问题,因为我可以在存储过程中执行它们。这是在SQL Server 2008 R2上。
谢谢。
答案 0 :(得分:0)
好的,我认为最好的办法是使用带有REPLACE()的动态SQL。试试这个:
CREATE TABLE Table1 (RepID INT,RepDate DATE,RepLocation VARCHAR(100));
INSERT INTO Table1
VALUES (1,'20100101','BH,AH'),
(2,'20100201','AH');
CREATE TABLE Table2 (LocID CHAR(2),LocName VARCHAR(25));
INSERT INTO Table2
VALUES ('BH','Bliss Hall'),
('AH','Agans Hall');
DECLARE @Replace VARCHAR(MAX);
SELECT @Replace = COALESCE('REPLACE( ' + @Replace,'REPLACE(RepLocation + '',''') + ',''' + LocId + ','',''' + LocName + ' '')'
FROM Table2
EXEC
(
'SELECT RepID,RepDate,' + @Replace + ' AS AllRepLocations
FROM Table1' --Change Table1 to your actual tableName
)
结果:
RepID RepDate AllRepLocations
----------- ---------- -------------------------
1 2010-01-01 Bliss Hall Agans Hall
2 2010-02-01 Agans Hall