| ■No91631 (魔界の仮面弁士 さん) に返信
> ■No91628 (韋駄天 さん) に返信
ありがとうございました。
CROSS APPLY で
検索したら以下のが見つかりました。
少し違うのですが
StudentID FirstName LastName Birthday Gender TestIDList
1 Taro Yamada 1980-02-15 00:00:00.000 M 1,2
2 Hanako Tanaka 1979-12-30 00:00:00.000 F 1
3 Yuko Suzuki 1979-07-07 00:00:00.000 F NULL
4 Takao Sato 1980-03-12 00:00:00.000 M 3
5 Hiroki Takagi 1979-04-05 00:00:00.000 M 1,2,3
6 Yuka Kimura 1981-03-27 00:00:00.000 F 2
このデータテーブルで
SELECT *
FROM T_Student AS S
CROSS APPLY dbo.ufnStringSplit(TestIDList);
を実行すると
StudentID FirstName LastName Birthday Gender TestIDList Value
1 Taro Yamada 1980-02-15 00:00:00.000 M 1,2 1
1 Taro Yamada 1980-02-15 00:00:00.000 M 1,2 2
2 Hanako Tanaka 1979-12-30 00:00:00.000 F 1 1
4 Takao Sato 1980-03-12 00:00:00.000 M 3 3
5 Hiroki Takagi 1979-04-05 00:00:00.000 M 1,2,3 1
5 Hiroki Takagi 1979-04-05 00:00:00.000 M 1,2,3 2
5 Hiroki Takagi 1979-04-05 00:00:00.000 M 1,2,3 3
6 Yuka Kimura 1981-03-27 00:00:00.000 F 2 2
なので、Value を TestIDList と置き換えれば出来上がりですね。
WITHの中身が少し理解できませんが、たぶんXMLを使用してカンマで分割しているのだと思います。
XMLを使用する方法も見たのですが、使ったことがないので理解できませんでした。
もう少し勉強します。
CrossApply を使うとできることがわかってよかったです。
|