【问题标题】:Normalize the incoming data规范化传入数据
【发布时间】:2021-05-13 21:37:31
【问题描述】:

我有包含这样数据的源

+-------+-------+---------+--------------+----------------+-------------+--------------+
| ID    | Name  | Type    | Product_Area | Product_status | Spare_value | Service_Time |
+-------+-------+---------+--------------+----------------+-------------+--------------+
| 10001 | Motor | Product | Electrical   | Active         |             |              |
+-------+-------+---------+--------------+----------------+-------------+--------------+
| 10002 | Fan   | Product | Mechanical   | Running        |             |              |
+-------+-------+---------+--------------+----------------+-------------+--------------+
| 10003 | Screw | Spare   |              |                | 10          |              |
+-------+-------+---------+--------------+----------------+-------------+--------------+
| 10004 | Nut   | Spare   |              |                | 20          |              |
+-------+-------+---------+--------------+----------------+-------------+--------------+
| 10005 | Kit   | Service |              |                |             | 1 year       |
+-------+-------+---------+--------------+----------------+-------------+--------------+
| 10006 | Oil   | Service |              |                |             | 6 months     |
+-------+-------+---------+--------------+----------------+-------------+--------------+

我必须对此进行规范化并放入不同的表中。因为前 3 列对于所有类型都是通用的,所以 Product_AreaProduct_status 只会出现在 Product 类型中。同样,Spare_valueservice_time 分别用于 Spare 和 Service。要求是创建一个 UID 并将其映射到其他表中,如下所示。

MASTER

+-----+-------+-------+---------+
| UID | ID    | Name  | Type    |
+-----+-------+-------+---------+
| 1   | 10001 | Motor | Product |
| 2   | 10002 | Fan   | Product |
| 3   | 10003 | Screw | Spare   |
| 4   | 10004 | Nut   | Spare   |
| 5   | 10005 | Kit   | Service |
| 6   | 10006 | Oil   | Service |
+-----+-------+-------+---------+

PRODUCT

+-----+--------------+----------------+
| UID | Product_Area | Product_status |
+-----+--------------+----------------+
| 1   | Electrical   | Active         |
| 2   | Mechanical   | Running        |
+-----+--------------+----------------+

SPARE

+-----+-------------+
| UID | Spare_value |
+-----+-------------+
| 3   | 10          |
| 4   | 20          |
+-----+-------------+

SERVICE

+-----+--------------+
| UID | Service_Time |
+-----+--------------+
| 5   | 1 year       |
| 6   | 6 months     |
+-----+--------------+

我创建了一个IDENTITY 并创建了第一个表MASTER,没有任何问题。但我不知道如何链接和创建其他表。我已经创建了foreign key,但我仍然不知道如何获取 UID 并相应地映射 UID。请提出建议。

【问题讨论】:

  • 在第一个表 (master) 中插入数据后,您可以通过将主数据连接到源数据并使用过滤器将 insert ... select ... 插入其他表。它能解决你的任务吗?
  • 这个不清楚。你到底是什么意思“我必须正常化”?鉴于什么,你被告知要做什么?你究竟在什么过程中陷入了困境?裸词“规范化”并不意味着特定的事情。重新排列表格以分隔子类型不是标准化用于 1NF 和更高 NF 的两件事中的任何一个。你的研究结果是什么? How to Askhelp centerMeta Stack OverflowMeta Stack Exchange

标签: sql database-design ssis sql-server-2012


【解决方案1】:

试试INSERT INTO SELECTSELECT INTO

INSERT INTO Product
SELECT IDENTITY(INT,1,1) AS UID, Product_Area,Product_status
FROM yourTable WHERE ID IN (10001,10002)


SELECT DISTINCT IDENTITY(int, 1, 1) AS UID,
                Spare_value
INTO   Spare
FROM yourTable


SELECT DISTINCT IDENTITY(int, 1, 1) AS UID,
                Service_Time
INTO   Service
FROM yourTable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 2021-10-09
    • 2016-07-23
    • 2013-12-11
    • 2013-01-18
    • 2017-01-14
    • 2012-10-08
    相关资源
    最近更新 更多