2009-09-03 70 views
2

全部,如何格式化父亲子记录的结果集?

我有一个结果集来自几个SQL Server表,我需要知道什么是我需要的排序记录的最佳方式。

我有以下记录;一个用户名和模块号作为父记录,然后对每个这些模块都有多个子模块子记录。我遇到的问题是模块记录与每个子模块记录有关联。因此,我得到了以下记录回从我的存储过程:

NAME   Module Sub-module 
Derek Kenney 1  1 
Derek Kenney 1  2 
Derek Kenney 1  3 
Derek Kenney 1  4 
Derek Kenney 1  5 

我要的是:

NAME   Module Sub-module 
Derek Kenney 1  1 
         2 
         3 
         4 
         5 

我想我的问题是我的存储过程,我下面贴内。


ALTER PROCEDURE [dbo].[uspGetReportData] 

AS 
BEGIN 
    SELECT first_name, last_name, email, country_id, T_User_Info.user_id, T_Modules_Viewed.module_id as 'modules viewed', T_Modules_Completed.module_id as 'modules completed' 
    FROM T_User_Info inner join T_Modules_Viewed on T_User_Info.user_id = T_Modules_Viewed.user_id left outer join T_Modules_Completed 
on T_Modules_Viewed.user_id = T_Modules_Completed.user_id 
END 

或许有ADO.NET中的一种方式来获得结果集我想,我没有意识到这一点。任何帮助,将不胜感激。

德里克·肯尼

+0

如果我的答案适用于您,您可以单击我的答案旁边的复选标记以“接受”它。 – 2009-09-03 15:06:30

回答

1

尝试这样的事:

DECLARE @YourData table (YourName varchar(20), Module char(1), SubModule char(1)) 

INSERT INTO @YourData VALUES ('Derek Kenney',1,1) 
INSERT INTO @YourData VALUES ('Derek Kenney',1,2) 
INSERT INTO @YourData VALUES ('Derek Kenney',1,3) 
INSERT INTO @YourData VALUES ('Derek Kenney',1,4) 
INSERT INTO @YourData VALUES ('Derek Kenney',1,5) 
INSERT INTO @YourData VALUES ('Derek Kenney',2,1) 
INSERT INTO @YourData VALUES ('Derek Kenney',2,2) 
INSERT INTO @YourData VALUES ('Derek Kenney',2,3) 
INSERT INTO @YourData VALUES ('Joe Smith' ,1,1) 
INSERT INTO @YourData VALUES ('Joe Smith' ,2,1) 
INSERT INTO @YourData VALUES ('Joe Smith' ,2,2) 


SELECT 
    CASE WHEN NameRank=1 /*OR NameModuleRank=1*/ THEN YourName ELSE '' END AS YourName 
     ,CASE NameModuleRank WHEN 1 THEN Module ELSE '' END AS Module 
     ,SubModule 
    FROM (SELECT 
       YourName,Module,SubModule 
        ,ROW_NUMBER() OVER(partition by YourName ORDER BY YourName) AS NameRank 
        ,ROW_NUMBER() OVER(partition by YourName,Module ORDER BY YourName,Module) AS NameModuleRank 
       FROM @YourData 
     ) dt 

OUTPUT:

YourName    Module SubModule 
-------------------- ------ --------- 
Derek Kenney   1  1 
          2 
          3 
          4 
          5 
        2  1 
          2 
          3 
Joe Smith   1  1 
        2  1 
          2 

(11 row(s) affected) 

,如果你愿意,你可以取消注释OR的情况下,显示YOURNAME当模块更改

+0

非常感谢KM。我会试试这个。非常感激。 – 2009-09-03 15:03:56