繁体   English   中英

有没有更简单的方法来为 SQL 格式化这些数据

[英]Is there an easier way to format this data for SQL

我正在尝试格式化此数据集,以便在对其执行 SQL 时更易于使用。 除了将所有列组合和更改为单个列之外,是否还有更简单的方法,以便我可以使用 SELECT 函数更轻松地调用它? 例如,我希望能够在一个“疾病”列下包含所有疾病。 在处理大量数据时,我无法复制和粘贴以重新排列数据

例如:

在此处输入图片说明

您可以使用一些技术来执行此操作,实际上您希望将列UNPIVOT转换为行。

MS SQL UNPIVOT: http ://sqlfiddle.com/#!18/39bc16/2

SELECT [Entity],[Code],[Year],[Disease],[Rate]
FROM [Results]
UNPIVOT ([Rate] FOR [Disease] 
          IN ([Cardiovascular],[Neoplasm],[Respiratory],[Diabetes],[Alzheimers]) 
) AS [ResultsSource]
实体 代码 疾病 速度
阿富汗 AFG 1990年 心血管 23.70775
阿富汗 AFG 1990年 肿瘤 5.129907
阿富汗 AFG 1990年 呼吸系统 3.036222
阿富汗 AFG 1990年 糖尿病 3.832555
阿富汗 AFG 1990年 老年痴呆症 0.999691
阿富汗 AFG 1991年 心血管 23.49031
阿富汗 AFG 1991年 肿瘤 5.086501
阿富汗 AFG 1991年 呼吸系统 3.012502
阿富汗 AFG 1991年 糖尿病 3.822228
阿富汗 AFG 1991年 老年痴呆症 0.994872

在标准化数据库中, EntityDisease将在它们自己的表中定义,并通过 FK 链接。 代码通常与Entity表相关联。

并非所有数据库都提供UNPIVOT功能,如本文所述,还有一些其他方法可以生成相同的结果集,对于少量列,简单的UNION ALL可以做同样的事情: http : //sqlfiddle.com/ #!18/39bc16/4

SELECT [Entity],[Code],[Year],'Cardiovascular' as [Disease], [Cardiovascular] as [Rate]
FROM [Results]
UNION ALL
SELECT [Entity],[Code],[Year],'Neoplasm' as [Disease], [Neoplasm] as [Rate]
FROM [Results]
UNION ALL
SELECT [Entity],[Code],[Year],'Respiratory' as [Disease], [Respiratory] as [Rate]
FROM [Results]
UNION ALL
SELECT [Entity],[Code],[Year],'Diabetes' as [Disease], [Diabetes] as [Rate]
FROM [Results]
UNION ALL
SELECT [Entity],[Code],[Year],'Alzheimers' as [Disease], [Alzheimers] as [Rate]
FROM [Results]

有关如何使用此输出存储到规范化结构的示例,请查看此小提琴: http ://sqlfiddle.com/#!18/ 66eba/2

采用:

INSERT INTO new_table (...)
SELECT ..., disease_val_col1 FROM old_table UNION
SELECT ..., disease_val_col2 FROM old_table UNION
...
;

填充这样的表格:

CREATE TABLE stats (
    id       int primary key auto_increment
  , region   int
  , year     int
  , disease  int
  , curval   decimal(9, 7)
  , code     VARCHAR(30)
  , foreign key (disease) references disease(id)
  , foreign key (region)  references regions(id)
  , foreign key (code)    references codes(code)
);

连同地区、代码、疾病等的其他表。还有一些工作要做,以获取在统计表中使用的相关主键值。

查看“数据库规范化”等概念,了解有关设计/构建表的方法的更多详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM