我使用通过 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
一种方法是:
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 和谷歌并没有带来有用的信息。
感谢您提供任何信息