ストアド プロシージャから XML を作成する必要があります。私のデータベースには、次のように単一の行に複数の値が格納されています。
ScheduleID EmployeeID M Tu W Th F Sa Su
======================================================
10 10001 1 1 0 0 0 0 0
11 10001 0 0 0 1 0 0 0
12 10002 0 0 0 0 0 1 1
次のような XML を作成する必要があります。
<schedules>
<task>
<ScheduleID>10</ScheduleID>
<EmployeeID>10001</EmployeeID>
<Workday>Monday</Workday>
</task>
<task>
<ScheduleID>10</ScheduleID>
<EmployeeID>10001</EmployeeID>
<Workday>Tuesday</Workday>
</task>
<task>
<ScheduleID>11</ScheduleID>
<EmployeeID>10001</EmployeeID>
<Workday>Thursday</Workday>
</task>
<task>
<ScheduleID>12</ScheduleID>
<EmployeeID>10002</EmployeeID>
<Workday>Saturday</Workday>
</task>
<task>
<ScheduleID>12</ScheduleID>
<EmployeeID>10002</EmployeeID>
<Workday>Sunday</Workday>
</task>
</schedules>
私が抱えている問題は、上記を行うために、曜日ごとに異なる行を返す必要があることです。そのため、case ステートメントを使用することを考えていましたが、「Workday」という名前の複数の列が作成されるため、次のステートメントが最も近いものでした。各 ScheduleID の有効期間は 1 ~ 7 日である可能性があるため、ELSE を追加することもできません。どうすればこれを行うことができますか?
SELECT ScheduleID, EmployeeID,
CASE WHEN (M = 1) THEN 'Monday' END as Workday,
CASE WHEN (Tu = 1) THEN 'Tuesday' END as Workday,
CASE WHEN (W = 1) THEN 1 ELSE 0 END as Workday,
CASE WHEN (Th = 1) THEN 1 ELSE 0 END as Workday,
CASE WHEN (F = 1) THEN 1 ELSE 0 END as Workday,
CASE WHEN (Sa = 1) THEN 1 ELSE 0 END as Workday,
CASE WHEN (Su = 1) THEN 1 ELSE 0 END as Workday
FROM Schedules
FOR XML PATH('task'), ROOT('schedules')