我对 SQL 还很陌生,实际上是一名 C# 程序员。我得到了一张包含零件编号的表格,其中的零件编号具有不同的属性名称和值。这些对象将有一个类,如汽车、卡车、吉普车等……每个类都有不同的属性,如汽车的里程和卡车的吨位。每个零件号可能有多个修订版,并且这些修订版的属性值可能会更改。
我想查询该课程的最新修订表。
有人可以帮忙吗?我通过谷歌搜索尝试了多种选择。可能是我脑子笨,搞不清楚。
原始数据库表:
零件编号 | REV | 属性名称 | 属性值 |
---|---|---|---|
256223 | A | 班级 | 汽车 |
256223 | A | 里程 | 15000 |
256223 | A | 座位 | 5 |
256223 | B | 班级 | 汽车 |
256223 | B | 里程 | 30000 |
256223 | B | 座位 | 5 |
256223 | C | 班级 | 汽车 |
256223 | C | 里程 | 45000 |
256223 | C | 座位 | 5 |
256224 | A | 班级 | 吉普车 |
256224 | A | 颜色 | 红色 |
256224 | A | 座位 | 5 |
256224 | B | 班级 | 吉普车 |
256224 | B | 颜色 | 蓝色 |
256224 | B | 座位 | 4 |
256224 | C | 班级 | 吉普车 |
256224 | C | 颜色 | 绿色 |
256224 | C | 座位 | 2 |
256225 | 1 | 经典 | 卡车 |
256225 | 1 | 里程 | 30000 |
256225 | 1 | 吨位 | 7 |
256225 | A | 班级 | 卡车 |
256225 | A | 里程 | 60000 |
256225 | A | 吨位 | 6 |
256225 | B | 班级 | 卡车 |
256225 | B | 里程 | 70000 |
256225 | B | 吨位 | 12 |
256226 | A | 班级 | 汽车 |
256226 | A | 里程 | 5000 |
256226 | A | 座位 | 5 |
256226 | B | 班级 | 汽车 |
256226 | B | 里程 | 8000 |
256226 | B | 座位 | 5 |
256226 | C | 班级 | 汽车 |
256226 | C | 里程 | 12000 |
256226 | C | 座位 | 5 |
256227 | A | 班级 | 吉普车 |
256227 | A | 颜色 | 黄色 |
256227 | A | 座位 | 5 |
256227 | B | 班级 | 吉普车 |
256227 | B | 颜色 | 棕色 |
256227 | B | 座位 | 41 |
256227 | C | 班级 | 吉普车 |
256227 | C | 颜色 | 青色 |
256227 | C | 座位 | 2 |
256228 | 1 | 班级 | 卡车 |
需要查询班级,请说 EG。 “卡车”并仅获取所有卡车的最新版本
零件编号 | REV | 班级 | 里程 | 吨位 |
---|---|---|---|---|
256225 | B | 卡车 | 70000 | 12 |
256228 | B | 卡车 | 20000 | 20 |
假设我查询“汽车”类别
零件编号 | REV | 班级 | 里程 | 座位 |
---|---|---|---|---|
256223 | C | 汽车 | 45000 | 5 |
256226 | C | 汽车 | 12000 | 5 |
请注意,不同类别的属性有所不同
提前非常感谢。
尝试过数据透视、最大修订等。我能够按类别进行过滤并将值放在同一行中,但无法按修订添加过滤器
您可以将
conditional aggregation
与 EXISTS
子句一起使用,如下所示:
select partnumber,
rev,
'YOUR_INPUT' as class,
max(case when attribute_name = 'Milage' then attribute_value end) as Milage,
max(case when attribute_name = 'Seats' then attribute_value end) as Seats
FROM your_Table t
WHERE exists (select 1 from your_Table tt
where t.part_number = tt.part_number
and tt.attribute_name = 'Class'
and tt.attribute_value = 'YOUR_INPUT')
GROUP BY partnumber, rev;
将
YOUR_INPUT
替换为 CAR、JEEP 等实际值