我有一张表(在 MySQL 中),有 3 列:
Location Category Supplier
A Computers Company X
A Printers Company Y
B Computers Company X
B Printers Company Y
B Software Company Y
C Computers Company Y
C Software Company Z
现在我需要制作一个包含上述信息的矩阵,如下所示:
Computers Printers Software
A Company X Company Y
B Company X Company Y Company Y
C Company Y Company Z
最终我需要在 Excel 中得到这个。
实际上,我的类别数量是可变的,因此在 MySQL 中对每个列进行连接并不是一个好选择。我可以用 PHP 编写一个函数,但我想知道是否有更优雅的解决方案。
我查看了 Excel 中的数据透视表,但它们似乎只适合以数字作为值。但也许我忽略了一些东西,因为我自己从未使用过 Excel。
答案1
我不知道这是否如您所希望的那样“优雅”,但您使用数据透视表的想法是正确的。您只需要稍微作弊。在这里,“辅助列”、数据透视表和“vlookup”函数可以成为您的朋友。
首先,在原始数据中添加“供应商编号”的辅助列。公司 X = 1,公司 Y = 2,公司 Z = 3。我将辅助列设置为第一列,以便以后在 vlookup 中使用。请注意,数据现在位于单元格 A5:D11 中。
接下来,像这样透视数据。我使用了“数据透视表选项”对话框的“显示”选项卡中的“经典数据透视表布局”选项(右键单击数据透视表以调出该对话框)。
选择并复制整个数据透视表,然后在原始数据透视表一侧的另一个位置“粘贴特殊/值”。然后,在表格副本的主体中输入显示的公式。请注意,vlookup 公式引用的是原始数据透视表(“H7”引用——参见上图)以及前面提到的范围 A5:D11。
就像我说的,它并不优雅,但它确实有效。有很多聪明人浏览这个网站,他们可能会为你想出一个“优雅”的解决方案!
答案2
我发现你可以完全避免使用数据透视表。参见下面的屏幕截图。使用辅助列。定义显示的命名范围。设置布局,如 G14:J18 所示。在表格主体中,使用 VLOOKUP 和 SUMPRODUCT。