0

次の投稿について質問があります。追加しますが、初心者なので追加できません。

リンクはこちら

特定のタイプのテーブルとより良い情報を追加するために編集されました

以下に 2 つのテーブルがあり、studentname の tblnames を tblCombineNames に取得して Student name に変換したいと考えています。

アドバイスしてください、ありがとう!

TblNames

ID(PK)          StudentType(FK) StudentNo(FK)   GradeNo(FK)     StudentName  
----------      ----------      ----------      ----------      -------------
1               1               1               1               Mary         
2               1               1               1               John         
3               1               1               1               Sam          
4               2               2               2               Alaina       
5               2               2               2               Edward       
6               2               2               2               Joe          

出力を以下にしたいと思います

TblCombineNames

ID(PK)          StudentType(PK) StudentNo(PK)   GradeNo(PK)     StudentNames       
----------      ----------      ----------      ----------      -------------      
1               1               1               1               Mary, John, Sam    
2               2               2               2               Alaina, Edward, Joe

次のような名前のスカラー値関数があります

---dbo.fn_Concatenate_Names
ALTER FUNCTION [dbo].[fn_Concatenate_Names]
(
    @StudentType VARCHAR(250),
    @StudentNo VARCHAR(250),
    @GradeNo VARCHAR(250)
)
RETURNS Varchar(250)
BEGIN
Declare @rtn Varchar(250)

BEGIN
    Select @rtn=(
    Select StudentNames + ', ' as 'data()'
    from tblStudentnames    
    where studentType = @StudentType and StudentNo = @StudentNo and GradeNo = @GradeNo
    for XML path('')
    )

    Set @rtn = LEFT(@rtn, Len(@rtn) - 1)
    END
    RETURN (@rtn)
END

関数を呼び出すように更新時に行います

update tblCombineNames
set studentnames = fn_concatenate_names(StudentType,StudentNo,GradeNo)

動作するように見えますが、250730 レコードの tblStudentNames で実行するには 2 時間かかります。そんなに時間はかからないと思います。

4

1 に答える 1

1

JOINサブクエリ内に置くだけで、テーブルと一緒に置くことができます。例

UPDATE  a
SET     a.names = b.StudentsList
FROM    tableName a
        INNER JOIN
        (
            SELECT  ST2.SubjectID, 
                    substring((SELECT ','+ ST1.StudentName
                            FROM dbo.Students ST1
                            WHERE ST1.SubjectID = ST2.SubjectID
                            ORDER BY ST1.SubjectID
                            For XML PATH ('')),2, 1000
                            ) StudentsList
            FROM    dbo.Students ST2
            GROUP   BY ST2.SubjectID
        ) b ON a.SubjectID = b.SubjectID
WHERE   a.SubjectID = @subjectid
于 2013-03-29T05:34:00.387 に答える