0

我一直在尝试基于另一个表创建一个新表。我在寻找适当的查询以使一列中的数据成为新字段并使其基于另一列时遇到问题。注意:我不能使用数据透视或选择子查询。

现有表如下所示:

+------------+--------------+------------+
| 身份证 | 类型 | TYPE_VALUE |
+------------+--------------+------------+
| 001 | 开始日期 | 2012-04-08 |
| 001 | 帐户 | 4654321 |
| 001 | 订单金额 | 231 |
+------------+--------------+------------+

它应该看起来像这样:

+-----+------------+--------------+---------+
| 身份证 | 开始日期 | 订单金额 | 帐户 |
+-----+------------+--------------+---------+
| 001 | 2012-04-08 | 231 | 4654321 |
+-----+------------+--------------+---------+

请注意有 n 列。

我使用的脚本如下所示:

创建表表 2
选择 ID、类型、类型值
案子
    WHERE type ='start_date' 然后 type_value,
案子
    WHERE type ='account' 然后 type_value
案子
    WHERE type ='order_amount' 然后 type_value
         从表 1

这个问题我最终得到了一个看起来像这样的表:

+-----+------------+--------------+---------+
| 身份证 | 开始日期 | 订单金额 | 帐户 |
+-----+------------+--------------+---------+
| 001 | 2012-04-08 | 空 | 空 |
| 001 | 空 | 231 | 空 |
| 001 | 空 | 空 | 4654321 |
+-----+------------+--------------+---------+

任何帮助将不胜感激!

4

2 回答 2

1

这是一个类枢轴习语:

create table table2
select id,
       max(case when type = 'start_date' then type_value end) start_date,
       max(case when type = 'order_amount' then type_value end) order_amount,
       max(case when type = 'account' then type_value end) account
from table1
group by id
于 2013-06-18T00:23:14.553 回答
0

我怀疑练习的目的是让您了解自联接。尝试:

CREATE TABLE TABLE2 AS
  SELECT t1.ID,
         t1.TYPE_VALUE AS START_DATE,
         t2.TYPE_VALUE AS ACCOUNT
    FROM TABLE1 t1
    LEFT OUTER JOIN TABLE1 t2
      ON (t2.ID = t1.ID)
    WHERE t1.TYPE = 'start_date' AND
          t2.TYPE = 'account'

我有信心你可以从那里解决问题。

分享和享受。

于 2013-06-18T00:27:39.647 回答