使用HSLQDB(2.2.9)我使用java JDBC连接的数据库。在不使用JOIN的情况下在HSQLDB中枢轴
某甲已接种疫苗的1和3,某乙已收到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和谷歌没有提供有用的信息。
谢谢你的任何信息
如果有10种不同的疫苗接种会怎么样?还是30?它们可以由应用程序用户创建和删除 – user1952162
感谢您的回答,'MAX'函数正是我所需要的,因为可以有多个值,我需要显示最近的日期。 – user1952162
'PIVOT'也受到Oracle的支持。 –