我有一个看起来像这样的表格:
Id Field Value
1 Color Red
1 Price 10.00
1 Size S
2 Color Red
2 Price 10.00
2 Size M
3 Color Red
3 Price 20.00
3 Size L
4 Color Yellow
4 Price 20.00
4 Size L
第1步:我需要将给定的表转换为包含列的表 ID、颜色、价格、尺寸,不重复,并且每个字段列不使用子查询。
第 2 步:我需要找到至少有 2 个共同值的所有 Id 对。如果添加了更多字段,查询必须是可扩展的,所以不要假设我们只有颜色、价格、尺寸。
在面试时有人问我,但我似乎无法弄清楚。
最佳答案
对于第 1 步,只需使用条件聚合:
SELECT
id,
MAX(CASE WHEN field = 'Color' THEN value END) color,
MAX(CASE WHEN field = 'Price' THEN value END) price,
MAX(CASE WHEN field = 'Size' THEN value END) size
FROM mytable
GROUP BY id
第 2 步看起来不像是可以在常规 SQL 中轻松完成的事情,首先是因为它意味着要处理可变数量的列。为此,正如 Gordon Linoff 所评论的,您需要使用动态 SQL,这似乎超出了您的问题范围。
关于sql - 没有子查询的表的多次传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57936170/