2009-09-03 15 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 

私は私の問題は、私は以下の投稿私のSPROC内にあると思います。


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

私の答えがあなたのために働く場合、あなたはそれを "受け入れる"ために私の答えの横にあるチェックマークをクリックすることができます。 –

答えて

1

はこのような何か試してください:あなたがしたい場合、あなたは時にモジュールYOURNAMEを表示する場合にはORのコメントを解除することができます

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) 

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を変更が

+0

ありがとうKM。私はこれを試してみましょう。とても有難い。 –

関連する問題