Excel Pivot:在表格中旋转两列而不汇总值

Posted

技术标签:

【中文标题】Excel Pivot:在表格中旋转两列而不汇总值【英文标题】:Excel Pivot: pivot two columns in table without summarizing values 【发布时间】:2017-07-25 10:31:53 【问题描述】:

我在 excel 中对下表使用此查询:

SELECT 
"WORK_CENTER"."EQNO",
"UD_DATA"."UD_COLS_ID",
"WORK_CENTER"."CUSER1",
"WORK_CENTER"."CUSER2",
"WORK_CENTER"."CUSER3",
"WORK_CENTER"."CUSER4", 
"WORK_CENTER"."CUSER5",
"WORK_CENTER"."NUSER1",
"WORK_CENTER"."NUSER2",
"WORK_CENTER"."NUSER3",
"WORK_CENTER"."NUSER4",
"WORK_CENTER"."NUSER5",
"UD_DATA"."CUSER"
FROM   "IQMS"."UD_DATA" "UD_DATA" 
FULL OUTER JOIN "IQMS"."WORK_CENTER" "WORK_CENTER" 
ON
 "UD_DATA"."PARENT_ID"="WORK_CENTER"."ID"
WHERE  
 "WORK_CENTER"."MFG_TYPE"='INJECTION'  
AND
 "UD_DATA"."UD_COLS_ID" IS NOT NULL
ORDER BY "WORK_CENTER"."EQNO"

结果

我得到下表:

除了 UD_COLS_ID(16,17,16,17...) 和 CUSER(1000,test1,2000,test2.....) 之外还有重复项

想要的结果

但我一直在 Excel 中尝试做的是旋转 CUSER(上图中的最后一列)列上的 UD_COLS_ID 列,删除现在重复的行并获取

我已经尝试使用 excels 数据透视表来执行此操作,但我似乎无法阻止它汇总值,例如我将列标题的 UD_COLS_ID、EQNO 和 CUSER 作为值。但它不断总结价值领域,似乎没有办法不选择它?

搜索解决此问题的方法不断将我带回到他们想要汇总数据的示例。向行和列添加更多值只会使其更难理解。

我该怎么做呢?

【问题讨论】:

您正在使用完全外连接,但随后您在 where 子句中声明了一行,将其简化为内连接。您需要完全外连接吗?你知道它是什么/理解使用它的含义吗?我并不是说它导致了这个问题,但基本上你的合规是你得到意外的重复行并在事后试图挤压它们,但问题更有可能是查询构造不正确。 Excel PIVOT 总是想知道如何处理它正在压缩的行,因为它用于汇总,因此它需要 AVERAGE、SUM、MAX 等 【参考方案1】:

您正在寻找类似的东西:

SELECT 
  WORK_CENTER.EQNO,
  WORK_CENTER.CUSER1,
  WORK_CENTER.CUSER2,
  WORK_CENTER.CUSER3,
  WORK_CENTER.CUSER4, 
  WORK_CENTER.CUSER5,
  WORK_CENTER.NUSER1,
  WORK_CENTER.NUSER2,
  WORK_CENTER.NUSER3,
  WORK_CENTER.NUSER4,
  WORK_CENTER.NUSER5,
  UD_DATA_id_16.CUSER as ID_16,
  UD_DATA_id_17.CUSER as ID_17

FROM   
  IQMS.WORK_CENTER WORK_CENTER 
  INNER JOIN
  IQMS.UD_DATA UD_DATA_id_16  
  ON
    WORK_CENTER.ID=UD_DATA_id_16.PARENT_ID AND
    UD_DATA_id_16.UD_COLS_ID = 16

  INNER JOIN
  IQMS.UD_DATA UD_DATA_id_17  
  ON
    WORK_CENTER.ID=UD_DATA_id_17.PARENT_ID AND
    UD_DATA_id_17.UD_COLS_ID = 17

WHERE  
  WORK_CENTER.MFG_TYPE='INJECTION'
ORDER BY 
  WORK_CENTER.EQNO

为什么?好吧,显然 UD_DATA 每个 work_center 行都有 2 行,但是您不希望这两行都与每个 work_center 行相关联,因为这会使 work_center 行加倍。这称为笛卡尔积。 ud_data中有Y行,work_center中有X行,重复数变成X * Y

您需要做的是将 ud_data 中每个“事物”的多行转换为单行。您可以通过在 oracle 中旋转数据来完成此操作,也可以通过多次连接表来完成此操作,并指定一些将 ud_data 和 work_center 之间的关系减少到 1:1 的内容。

具有简化列布局的 work_center 行:

id, ud_data_id
wc1, ud1
wc2, ud2
wc3, ud3

一个ud_data行集:

id, thing, otherthing
ud1, apple, 100
ud1, android, 101
ud2, apple, hello
ud2, android, goodbye
ud3, apple, jan-17
ud3, android, dec-25

每个工作中心行的两个 UD 行需要变成一行。您可以在加入之前执行此操作,方法是将 UD 数据行旋转为如下所示:

id, applething, androidthing
ud1, 100, 101
ud2, hello, goodbye
ud3, jan-17, dec25

或者你加入两次,每次只选择你感兴趣的东西(关于 ID 的语法不正确 - 没有数据库会接受这个,但这不是重点):

work_center
join ud_data on id=id   AND ud_data.thing='apple'
join ud_data on id=id   AND ud_data.thing='android'

【讨论】:

感谢@Caius-Jard!我有时并不完全理解使用不同连接的差异。但再次感谢您的回复。我刚试过,我认为只需要删除 FROM 子句之前的最后一个逗号 Excel 似乎在抱怨 ORA-00904:"UD_DATA"."UD_COLS_ID": invalid identifier 。我会继续研究它,因为这让我比以前更接近了 已修复,抱歉!我加入了两次表,将变量 UD_DATA_id_16 / 17 称为别名(因此查询中不再有任何表别名为 UD_DATA),但留下了一些将 UD_DATA 引用为表名的地方 没问题。并感谢您的解释!真的很有帮助!

以上是关于Excel Pivot:在表格中旋转两列而不汇总值的主要内容,如果未能解决你的问题,请参考以下文章

电子表格表头固定--冻结窗口的方法不好使

handsontable:隐藏一些列而不更改数据数组/对象

向H2数据库中的所有表添加列而不手动列出表

excel中两列都有重复值,怎样筛选出两列唯一值?

如何将多个excel表格的数据合并计算到一张表格中

在 Excel Pivot 中应用多个值筛选器