多くのスレッド、サイト、ブログ、およびAPIを検索しましたが、これを把握できないようです。私はジャンクションテーブルの行からCSV文字列を作成したいが、ここにキャッチがある。これは、データ全体のセットである必要があります。私は混乱していることを知っています、ここでは故障です。ジャンクションテーブルのコンマで区切られた文字列内部クエリ(SQL Server)
のは、次の表に一般的な例を使ってみましょう:
- 学生(ID、名前、GPA)
- クラス(ID、部門、レベル)
- StudentsInClasses(StudentID、のClassID)
私はすべてのクラスを照会したいと思いますが、(レコードごとに)そのクエリ内で、各クラスのStudent IDのCSV文字列を取得したいとします。結果はこのようなものになります。
Class StudentsID_CSVString
----- --------------------
BA302 1,2,3,4,5,6,7,8,9
BA479 4,7,9,12,15
BA483 7,9,12,18
を私は次のようなCOALESCE文を使用しようとしましたが、私はそれが理由合体のための間抜けな構文で動作させることはできません。この目標を達成するためのよりよい方法があるのですか、まったく文法的に間違っているだけですか?あなたが一度に一つのクラスのための文字列を取得することができますカンマで区切られた文字列と変数@StudentsID_CSVString
を埋める技術で
declare @Students table (ID int, Name varchar(50), Gpa decimal(3,2))
declare @Classes table (ID int, Dept varchar(4), [Level] varchar(3))
declare @StudentsInClasses table (StudentID int, ClassID int)
declare @StudentsID_CSVString varchar(128)
insert into @Students (ID) values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18)
insert into @Classes (ID, Dept, [Level]) values (1, 'BA', '302'), (2, 'BA', '379'), (3, 'BA', '483')
insert into @StudentsInClasses (StudentID, ClassID) values
(1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1),
(4,2),(7,2),(9,2),(12,2),(15,2),
(7,3),(9,3),(12,3),(18,3)
神聖ながらくた。テスト済み、素晴らしい作品です。 +1 =) – jadarnel27
@Mikael:あなたのコードで3つのクラスのそれぞれに '1,2,3,4,5,6,7,8,9'を取得します:( – Chiramisu
@Chiramisu - あなたのテーブルにあなたの質問があります。私はStudentInClassesとClassの間の結合に問題があると思います。あるいはサブクラス 'whereClassID = C.ID'のwhere句を忘れてしまったのです。 –