我在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中尝试做的是将列UD_COLS_ID转移到CUSER(上一个图像中的最后一列)列,删除现在重复的行并获取
我已尝试使用excels数据透视表来执行此操作,但我似乎无法阻止它汇总值,例如我将列标题的UD_COLS_ID,EQNO和CUSER作为值。但它一直在总结价值领域,似乎不是一种不选择它的方法?
为此搜索修复程序会让我回到他们想要汇总数据的示例。并且在行和列中添加更多值会使其更难以遵循。
我该怎么做呢?
答案 0 :(得分: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
你需要做的是转换多行" thing"在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'