【发布时间】:2021-06-06 19:54:29
【问题描述】:
我设置了三个表,如下所示
PETS TABLE
-------------------------
| PET_ID | NAME | COLOR |
| 1 | Jay | Brown |
| 2 | Bo | Gray |
PETS_SHOTS TABLE
---------------------------------------------------------------
| ID | PET_ID | SHOT_ID | VACCINATED_ON | VACCINATION_EXPIRES |
| 1 | 1 | 5 | 2021-08-09 | 2024-08-09 |
| 2 | 2 | 5 | 2021-02-13 | 2021-02-13 |
| 3 | 2 | 6 | 2019-04-23 | 2020-05-03 |
SHOTS TABLE
----------------------------
| ID | NAME | YEARS |
| 5 | Rabies | 1 |
| 6 | Bordetella | 2 |
| 7 | Distemper | 2 |
我正在寻找一个可以给我以下结果的查询。是否甚至可以为SHOTS 表中的每一行自动生成列?
-----------------------------------------------------------------------------------
| PET_ID | NAME | COLOR | RABIES_EXPIRES | BORDETELLA_EXPIRES | DISTEMPER_EXPIRES |
| 1 | Jay | Brown | 2024-08-09 | 2021-02-13 | |
| 2 | Bo | Gray | 2021-02-13 | 2020-05-03 | |
我最初的想法是在SELECT 子句中为每种类型的SHOT 使用子查询,就像这样
SELECT
P.PtOwnerCode AS "owner_id",
P.PtPetName AS "name",
P.PtLast AS "last_visit",
P.PtNotes AS "notes",
P.PtWarning AS "warning",
(
SELECT
PS.PtShVacDate
FROM
PetShots AS PS
INNER JOIN Shots S ON PS.PtShShot = S.ShSeq
AND PS.PtShPet = P.PtSeq
WHERE
S.ShName = 'Bordetella') AS "bordetella"
FROM
Pets AS P
当我意识到该表中可能有 30 多个条目时,这很快就失控了。
【问题讨论】:
标签: sql sql-server tsql join pivot