Java JDBCを介して接続するHSLQDB ( 2.2.9)データベースを使用しています。
人物Aは予防接種1と3を受け取り、人物Bは2と4を受け取りました。この簡単なクエリを使用すると、次のようになります。
SELECT std.*,vac.Date FROM Students AS std
LEFT JOIN ValuesVaccination AS vac
ON vac.ID_Students = std.ID
次のような結果セットが表示されます。
ID | Name | ID_Vaccination | Date
1 | PersonA | 1 | 2011-06-01
1 | PersonA | 3 | 2012-03-21
1 | PersonB | 2 | 2012-08-11
2 | PersonB | 4 | 2012-09-08
私が取得したいのは:
ID | Name | Vaccination1 | Vaccination2 | Vaccination3 | Vaccination4
1 | PersonA | 2011-06-01 | NULL | 2012-03-21 | NULL
2 | PersonB | NULL | 2012-08-11 | NULL | 2012-09-08
これを行う1つの方法は次のとおりです。
SELECT std.*,
vac1.Date AS "Vaccination1",
vac2.Date AS "Vaccination2",
vac3.Date AS "Vaccination3",
vac4.Date AS "Vaccination4"
FROM Students AS std
LEFT JOIN ValuesVaccination AS vac1
ON vac1.ID_Students = std.ID AND vac1.ID_Vaccinations = 1
LEFT JOIN ValuesVaccination AS vac2
ON vac2.ID_Students = std.ID AND vac2.ID_Vaccinations = 2
LEFT JOIN ValuesVaccination AS vac3
ON vac3.ID_Students = std.ID AND vac3.ID_Vaccinations = 3
LEFT JOIN ValuesVaccination AS vac4
ON vac4.ID_Students = std.ID AND vac4.ID_Vaccinations = 4
問題は、異なる予防接種の数が変動することです。ループを使用してJava文字列のJOINでクエリを作成せずにこれを行うための適切な方法はありますか?
PIVOT関数が必要なものであることがわかりましたが、HSQLDBはそれをサポートしておらず、stackoverflowとgoogleを検索しても有用な情報が表示されなかったようです。
情報ありがとうございます