显示存储过程中多个表的相关查找信息

时间:2014-08-06 10:11:42

标签: sql-server function tsql

我确定之前已经回答过,但我找不到符合我要求的任何内容。 我来自MS Access背景和TSQL是我慢慢进入的。我设计的报告需要来自几个不同表格的信息。有一个主表有头信息,并且有相关的表有很多信息。我想将MANY信息组合到一个视图/存储过程中,其中MANY信息已被枚举并列在另一个之下。在MS Access中,我可以使用函数执行此操作,但认为可能有更简洁的方法使用TSQL执行此操作。

假设主表是项目信息,其中一个相关表是项目的联系人姓名。我希望显示一个视图,该视图按以下方式组合信息。联系人是单独的记录,但在视图/ sp中,它们被组合为一个具有换行符的字段。

Proj_ID    Project_Name      Project_Contacts
123        Proj ABC          Contact 1
                             Contact 2
                             Contact 3
                             Contact 4

我想用几个相关的表格来做这件事。 什么是最好的方法,有人给我一段代码开始使用?

2 个答案:

答案 0 :(得分:0)

请查看这是否适合您。

DECLARE @TestTable TABLE (Proj_ID INT, Project_Name VARCHAR(10),Project_Contacts VARCHAR(10))

INSERT INTO @TestTable VALUES
('123','Proj ABC','Contact 1'),
('123','Proj ABC','Contact 2'),
('123','Proj ABC','Contact 3'),
('123','Proj ABC','Contact 4'),
('123','Proj ABC','Contact 5'),
('124','Proj BCD','Contact 3'),
('124','Proj BCD','Contact 5'),
('125','Proj CDE','Contact 1'),
('125','Proj CDE','Contact 3'),
('125','Proj CDE','Contact 5'),
('125','Proj CDE','Contact 6'),
('125','Proj CDE','Contact 7')


SELECT Proj_ID,
      Project_Name,
      REPLACE((SELECT Project_Contacts + ','
            FROM @TestTable AS t2
            WHERE t1.Proj_ID = t2.Proj_ID
            FOR XML PATH('')),',','<BR>') AS Project_Contacts
FROM @TestTable AS t1
GROUP BY Proj_ID, Project_Name

答案 1 :(得分:0)

根据我解释的问题,研究SQL关键字..

选择

INNER JOIN

GROUP BY

以下示例代码是我解释为您要查找的内容..

    declare @t1 table (Project_id int, Project_Name varchar(20))
declare @t2 table (Project_id int, Project_Contacts varchar(20))

insert into @t1 (Project_id, Project_Name)
values
(1, 'ABC')
, (2, 'CDE')
, (3, 'FGH')
, (4, 'IJK')

insert into @t2 (Project_id, Project_Contacts)
values
(1, 'Contact aaa1')
, (1, 'Contact aaa1')
, (2, 'Contact bbb2')
, (3, 'Contact ccc3')
, (4, 'Contact ddd4')
, (4, 'Contact ddd4')

select table1.Project_id, table1.Project_Name, table2.Project_Contacts
from @t1 table1
    inner join
    @t2 table2
    on table1.Project_id = table2.Project_id
group by table1.Project_id, table1.Project_Name, table2.Project_Contacts