我有一个表demo1,其中有多个类似的dim\u键,用于几个不同的属性名(属性名)。我想显示一个表,其中包含dim\u key、upc、dairy\u clm、kosher\u clm、fat和carolis列,匹配的值是行。
这是原始表demo1:[1]:https://imgur.com/a/kqaym1c
这就是我想要的样子(表:demo2):[2]:https://imgur.com/a/nwpohhv
我尝试过将demo1中的行插入到一个空的demo2表中,但结果并不是我想要的那样。我也不能用那种方式得到暗号。我也尝试过使用pivot,但只得到了错误。我正在使用mysql,但这也需要在ssms中工作。如果我必须选一个的话,我会选择ssms。
INSERT INTO Demo2 (UPC, DAIRY_CLM, KOSHER_CLM, FAT, CALORIES)
SELECT
(CASE WHEN ATTR_NAME = 'UPC' THEN VALUE END),
(CASE WHEN ATTR_NAME = 'DAIRY_CLM' THEN VALUE END),
(CASE WHEN ATTR_NAME = 'KOSHER_CLM' THEN VALUE END),
(CASE WHEN ATTR_NAME = 'FAT' THEN VALUE END),
(CASE WHEN ATTR_NAME = 'CALORIES' THEN VALUE END)
FROM Demo1;
2条答案
按热度按时间hiz5n14c1#
您可以使用(假)聚合函数和分组方式
这两个数据库的工作方式应该相同。。
zpjtge222#
这确实是一个轴心,也被称为交叉表,或有时转置
有些数据库有专门的工具来完成这项工作,有些则必须使用分组语法。我更喜欢后者,因为它普遍适用
如果有什么安慰的话,你真的很接近!
它是如何工作的?
好吧,如果您运行的是您已经拥有的非分组、无最大函数版本:
然后你会看到你的数据变成“对角线”:
在每列(每个dim\键)中只有一个值,其余为空
在groupby和max中添加会导致它们折叠成一行,因为max()只返回列中的值,并使所有的空值消失。这是分组的一个固有属性,行数据不会“停留在一起”——在特定dim\u键的组中,max(dairy\u clm)可以来自任何行,max(kosher\u clm)可以来自任何其他行。。在实践中,这意味着选取单个值,舍弃空值,它们都出现在同一行上。。
..因此你的垂直数据在穿过对角线之后是水平的