我有一个名为“initial”的表,格式如下:
ID | 类别 | 价值 |
---|---|---|
1 | 姓名 | 鲍勃 |
1 | 数数 | 102 |
1 | 串行 | 123ABC |
2 | 姓名 | 玛丽 |
2 | 串行 | 234BCD |
3 | 串行 | 345CDE |
表“系列”:
连续剧 | 颜色 |
---|---|
123ABC | 蓝色的 |
234BCD | 红色的 |
345CDE | 蓝色的 |
还有一个表“用户”:
ID | 优先事项 |
---|---|
1 | 高的 |
2 | 中等的 |
3 | 低的 |
我使用以下查询转置“initial”,然后尝试加入“serial”:
SELECT
MAX(CASE WHEN initial.category = 'Name' THEN initial.value END) 'Name',
MAX(CASE WHEN initial.category = 'Count' THEN initial.value END) 'Count',
MAX(CASE WHEN initial.category = 'Serial' THEN initial.value END) 'Serial',
serials.color
FROM initial
LEFT JOIN users on users.id = initial.id
LEFT JOIN serials on serials.serial = initial.value
当我这样做时,如果前面有相同 id 的其他条目,它就无法正确加入“serial”。我试过
LEFT JOIN serials on serials.serial = initial.value and initial.category = "Serial"
但它没有做任何事情。如果我将其添加and initial.category = "Serial"
到第一个连接:
LEFT JOIN users on users.id = initial.id and initial.category = "Serial"
然后我可以成功获取“颜色”,但不再获取其他类别值。我怎样才能成功加入序列表?
预期成绩:
ID | 姓名 | 数数 | 串行 | 颜色 |
---|---|---|---|---|
1 | 鲍勃 | 102 | 123ABC | 蓝色的 |
2 | 玛丽 | 234BCD | 红色的 | |
3 | 345CDE | 蓝色的 |
实际(“颜色”不是从 id 1 和 2 中提取的,因为initial.value 指的是每个 id 的第一个条目,在本例中为“Name”“Bob”和“Mary”,而对于 id 3,它指的是“Serial” '“345CDE”:
ID | 姓名 | 数数 | 串行 | 颜色 |
---|---|---|---|---|
1 | 鲍勃 | 102 | 123ABC | |
2 | 玛丽 | 234BCD | ||
3 | 345CDE | 蓝色的 |
我想过创建一个临时表,但由于访问权限,我无法创建任何表/视图
您可以将转置作为子查询执行,然后进行连接: