2014-09-04 19 views
0

我想为使用sql查询的数据可视化程序提供数据。为了创建一个饼图,它想要的输入如下所示:mysql列名称和字段值作为行

+--+-----+-----+-----+ 
|SliceName|SliceValue 
+--+-----+-----+-----+ 
|Slice 1 |1 
+--+-----+-----+-----+ 
|Slice 2 |5 
+--+-----+-----+-----+ 

我们的产品数据被存储在一个表是这样的:

+--+-----+-----+-----+ 
|ProductID|Slice 1 | Slice 2 
+--+-----+-----+-----+ 
|123  |1  |5 
+--+-----+-----+-----+ 

附加产品被存储在其他行。我们需要使用ProductID检索其中一行,然后创建sql输出,它看起来像第一个示例中的表。我已经阅读了一些关于“pivoting”的文章,但我不确定这正是我们在这里需要做的。

任何人都可以提供一些指针?

+1

http://stackoverflow.com/q/7674786/1729885 – 2014-09-04 22:46:39

+0

@NielsKeurentjes这就是我需要的吗?此方法不会将行的名称作为行从初始表中输出。这是我最挣扎的事情。我不需要做任何新的计数或总结。所有的值已经存在。我只需要基本上将一行变成一张表。 – melchoir55 2014-09-04 22:55:27

+0

是的,这就是枢轴转动的意义,以及对其他问题的解答中所解释的内容。 SQL是关于行的,字段名称只是装饰。因此,透视不是SQL的本地功能 - 像字段名称这样的元数据不会突然变成“价值”。 – 2014-09-04 22:56:28

回答

0

是否有可能改变你的数据库模式(你是否有这样的愿望)?通过查看数据规范化和数据库内的关系可以解决您的问题。

我想借此与切片的信息了产品表,并到一个名为新表。

看看这个SQL Fiddle的例子。

你会看到,我创建了一个FK在表:

FOREIGN KEY (ProductID) REFERENCES Products(ProductID) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE 

所以,如果你从产品删除一行表,在数据与ProductID相关的表格也将被删除。此外,如果您要更新表,产品表,那么此更改将被级联到Slices表。

我们得到你想要的格式的数据,你既可以从SELECT使用ProductID使用与INNER JOIN一个SQL语句SELECT基于产品表,例如另一列直接

SELECT SliceName, SliceValue 
FROM Slices s 
INNER JOIN Products p ON s.ProductID = p.ProductID 
WHERE ProductName = "widget" 

将您的切片存储在这样的单独表格中会更有效率并提供灵活性;除非每个产品都有固定数量的切片。

相关问题