我正在尝试格式化此数据集,以便在对其执行 SQL 时更易于使用。除了将所有列组合和更改为单个列之外,是否还有更简单的方法,以便我可以使用 SELECT 函数更轻松地调用它?例如,我希望能够在一个“疾病”列下包含所有疾病。在处理大量数据时,我无法复制粘贴重新排列数据
例如:
答案 0 :(得分:0)
您可以使用一些技巧来做到这一点,实际上您希望将列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
函数,如this article中所述,还有一些其他方法可以生成相同的结果集,对于少量列,一个简单的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
答案 1 :(得分:0)
使用:
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)
);
连同地区、代码、疾病等的其他表格。 要获取要在 stats 表中使用的关联主键值,还有一些工作要做。
查看“数据库规范化”等概念,了解有关设计/构建表格的方法的更多详细信息。