首页 > 解决方案 > 如何查询零件列表,以便轻松比较来自多个不同组的零件?(数据透视表?)

问题描述

我有一个表格可以跟踪有关汽车的信息(对于这个例子来说)。每个条目都包含关于汽车上某个部分的描述。因此,例如,这是表数据片段的样子:

+-----+-----------+--------------+-------------+
| ID  | ModelName | PartCategory | Description |
+-----+-----------+--------------+-------------+
|   1 | name1     | category1    | blah blah   |
|   2 | name1     | category2    | blah blah   |
|   3 | name2     | category2    | blah blah   |
|   4 | name2     | category3    | blah blah   |
|   5 | name2     | category4    | blah blah   |
| ... | ...       | ...          | ...         |
+-----+-----------+--------------+-------------+

有没有什么巧妙的方法来查询数据,让我可以更轻松地同时比较多个模型的数据?基本上我想一次比较多辆汽车的零件类别。不过,并非每辆车都有每个零件类别的记录,所以我希望在这些情况下使用空值。我正在尝试制作如下所示的东西:

+-----------+-------+--------+--------+-----+
| category  | name1 | name2  | name3  | ... |
+-----------+-------+--------+--------+-----+
| category1 | Value | Value  | Value  | ... |
| category2 | Value | Value  | Value  | ... |
| category3 | Value | (null) | Value  | ... |
| category4 | Value | Value  | (null) | ... |
+-----------+-------+--------+--------+-----+
(Is this what you would call a table pivot?)

或者这个模式首先不适合这个目的?比较汽车模型是这个应用程序的主要目标,所以如果第一个截图中的表结构看起来是个坏主意,我会接受不同的模型。

标签: mysqlsql

解决方案


第一个表看起来不太正确,因为它最终会创建冗余数据。备用数据模型 - 使用如下数据模型创建 3 个表以填充数据。

  1. 表格1

    ┌───────────────────┬──────────────┬─────────────────┐
    │ Table_Name        │ Model_Config │                 │
    ├───────────────────┼──────────────┼─────────────────┤
    │ Column_name       │ Data_type    │ Constraint      │
    ├───────────────────┼──────────────┼─────────────────┤
    │ Model_Id          │ number(5)    │ PK              │
    ├───────────────────┼──────────────┼─────────────────┤
    │ Model_Name        │ varchar2(50) │                 │
    └───────────────────┴──────────────┴─────────────────┘
    
  2. 表 2

    ┌───────────────────┬────────────────────────────────┐
    │ Table_Name        │ PartCategory_Config            │
    ├───────────────────┼──────────────┬─────────────────┤
    │ Column_name       │ Data_type    │ Constraint      │
    ├───────────────────┼──────────────┼─────────────────┤
    │ PartCategory_Id   │ number(5)    │ PK              │
    ├───────────────────┼──────────────┼─────────────────┤
    │ PartCategory_Name │ varchar2(50) │                 │
    └───────────────────┴──────────────┴─────────────────┘
    
  3. 表3

    ┌───────────────────┬────────────────────────────────┐
    │ Table_Name        │ Model_partCategory_link        │
    ├───────────────────┼──────────────┬─────────────────┤
    │ Column_name       │ Data_type    │ Constraint      │
    ├───────────────────┼──────────────┼─────────────────┤
    │ Model_Id          │ number(5)    │                 │
    ├───────────────────┼──────────────┤                 │
    │ PartCategory_Id   │ number(5)    │  Composite_PK   │
    └───────────────────┴──────────────┴─────────────────┘
    

我已根据您的表将查询上传到下面的 dbfiddle 链接,以获取现有数据模型以及对建议的数据模型更改的查询。您能否检查以下链接以获取解决方案,看看这是否适合您。

https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=c207dd2b71545ed787db0fb7ef65800a


推荐阅读