【发布时间】:2016-10-26 07:28:06
【问题描述】:
我有一个与已经问过的问题有点相似的问题:Mysql, reshape data from long / tall to wide
我的复杂性来自于我的数据结构可能是易变的,并且可以根据用户的判断进行更改。因此,我的列可以根据填充表的字段更改聚合(增长或缩小)。
对于我的表中可能包含的内容的示例,以下是一些记录:
输入:
LOCATION User_Name Title Phone
Living Room Joe Schmo Worker 12-23
Baseball Park Jane Doe Worker 23-34
Backyard Tiger Woods Worker 34-45
但标题中存在相当多的可变性,甚至可能在位置中
输入:
LOCATION User_Name Title Phone
Living Room Batman Manager 9112
Baseball Park Batman Manager 9112
Backyard Batman Manager 9112
所以我需要做的是,在匹配的位置上,我需要一个宽表,其中包含与位置关联的所有用户:
输出:
LOCATION User_Name Title Phone User_Name Title Phone
Living Room Joe Schmo Worker 12-23 Batman Manager 9112
Baseball Park Jane Doe Worker 23-34 Batman Manager 9112
Backyard Tiger Woods Worker 34-45 Batman Manager 9112
任何建议提示将不胜感激。我试图复制这个例子,但显然我如何解释表格可以动态变宽或变窄的事实?我试图做枢轴,但我无法让它与多个字段一起工作。
想法?
【问题讨论】:
-
请重新考虑您的想法 - 您的表目前正常化,您想要的是对表进行非规范化。想一想 - 如果你想得到一个简单的答案怎么办
give me all users with a tile = 'Manager。目前非常简单,只需SELECT * FROM table WHERE title='Manager'- 如果Titlecolumn 上存在索引,则简单且非常有效。非规范化后它必须是:SELECT * FROM table WHERE title1='Manager' OR title2='Manager' OR ...... OR Ttile2876 = 'Manager'。查询很尴尬,而且速度很差。我强烈建议你放弃这个想法。 -
哦,相信我,尝试这样做就像钉在黑板上一样。不幸的是,我要求将此表非规范化以进行演示。该演示文稿没有抽象层供我强迫他们为我对其进行非规范化。因此,需求被传递到数据库级别来执行。 TLDR;我想放弃这个,但我根本做不到。
-
是否需要更改数据库中的表结构,或者只是生成看起来像您要求的输出? Normality 仅指数据库,而不是您创建的报告。对于您的问题:如果这是一项报告要求,通常最好通过报告应用程序而不是直接 SQL 来解决。
-
我必须更改数据库中的结构。 COTS 产品是一种映射产品,需要严格的参数作为输入,我没有选择编写服务来为我完成此提升。它必须在数据库中。
标签: sql sql-server oracle