SQl 查询将具有不同行中的属性和过滤器值的表连接起来

问题描述 投票:0回答:1

我对 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

请注意,不同类别的属性有所不同

提前非常感谢。

SQL Query to get latest revision from Table with different attributes

尝试过数据透视、最大修订等。我能够按类别进行过滤并将值放在同一行中,但无法按修订添加过滤器

sql pivot hana
1个回答
0
投票

您可以将

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 等实际值

© www.soinside.com 2019 - 2024. All rights reserved.