[英]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 |
在标准化数据库中,
Entity
和Disease
将在它们自己的表中定义,并通过 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.