从合并中返回结果集中的列导致另一个表

时间:2015-05-19 16:34:40

标签: sql-server sql-server-2008 tsql sql-server-2008-r2

请原谅标题,我不确定如何准确描述下面的情况...

我有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上。

谢谢。

1 个答案:

答案 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