【问题标题】:how to combine multiple queries如何组合多个查询
【发布时间】:2019-01-02 19:57:49
【问题描述】:

我有下表:

表名:STAT

Region   M07  M08 M09 
---------------------
P1       0    1   0    
P2       0    0   0   
P3       2    0   0    
P4       0    0   0     
P5       0    0   0     
P6       0    0   0   
P7       9    0   3  

我取消了 TABLE STAT 上的月份列,其中包含数值。 得到的结果

---------------------
Region   Month  Qty
---------------------
P1      M07    0
P1      M08    1
P1      M09    0
P2      M07    0
P2      M08    0
P2      M09    0

使用此代码完成了 UNPIVOT

select Region, month, qty FROM
(
    SELECT Region, 'M07' AS month, M07 AS qty from STAT
    UNION ALL
    SELECT Region, 'M08' AS month, M08 AS qty from STAT
    UNION ALL 
    SELECT Region, 'M09' AS month, M09 AS qty from STAT
)x

我现在需要向这个未透视的数据集添加一个新列。 例如名为“PROFILE”的列。 我尝试将代码编写为

ALTER TABLE STAT
ADD COLUMN `Profile` CHAR(8) NOT NULL DEFAULT 'MI';

然后我尝试显示未透视数据集的结果和通过编写添加的新列

SELECT * from STAT

但是,我现在看到添加到原始数据集中的新列,但我看不到未透视的数据。我想查看未透视的数据和添加的最终新列。 我假设我需要在代码的 unpivot 部分的某处编写一个 ALTER 表。一些帮助将不胜感激?

【问题讨论】:

  • 您的“UNPIVOT”生成了一个结果集;它没有修改原始的 STAT 表。一般来说,所有 SELECT 语句都是如此;他们不会修改他们从中选择的表。
  • @RobertHarvey 谢谢你是正确的。我需要在我的 unpivot 部分的代码的 SELECT 部分中编辑什么来更改表?
  • 这可能不是正确的方法。不要将 DDL(数据定义)语句与 DML(数据操作)语句混用。
  • @RobertHarvey 谢谢你的来信。我会调查一下。我对 SQL 很陌生。

标签: mysql sql date create-table unpivot


【解决方案1】:

您实际上需要创建一个新表来存储未透视的数据。这可以通过将查询包装在 CREATE TABLE ... AS SELECT 语句中来实现。

CREATE TABLE stat2 AS
SELECT region, 'M07' AS month, M07 AS qty from stat
UNION ALL
SELECT region, 'M08', M08 AS from stat
UNION ALL 
SELECT region, 'M09', M09 AS from stat;

那么你可以这样做:

ALTER TABLE STAT2
ADD COLUMN `Profile` CHAR(8) NOT NULL DEFAULT 'MI';

当然还有:

SELECT * from STAT2;

【讨论】:

  • 这意味着我需要一组代码来创建表以读取我的 CSV 中的实际列......然后像你​​建议的那样创建另一个表来存储未透视的数据?有什么方法可以将它实际结合起来,只用一个创建表来加载数据,然后再取消透视?
猜你喜欢
  • 2015-08-06
  • 1970-01-01
  • 2017-10-09
  • 1970-01-01
  • 2017-09-02
  • 1970-01-01
  • 2019-11-13
  • 2015-03-18
  • 2013-09-06
相关资源
最近更新 更多