如何合并具有不同标志的同一个表中的数据?
我正在尝试提取包含作业编号、订单编号、零件编号和说明的数据。我的表格中的某些行被标记为“L”(表示人工)和“M”(表示材料)。 L 标记的行可以按字面意思理解,hours_worked = 工作总时间,人工 = 人工成本,间接费用 = 间接费用成本。 M 标记行不同,hours_worked = 购买数量,amount_labor = 材料购买价格。如何区分这两个标志并将其打印到同一个表中?
这是我到目前为止所得到的:
SELECT
DETAIL.JOB,
DETAIL.SUFFIX,
ORDER.ORDER_NO,
ORDER.ORDER_LINE,
ORDER.PART,
DETAIL.SEQ,
OPERATIONS.DESCRIPTION,
SUM(lbr.Hours) AS sum_hours,
SUM(lbr.Labor) AS sum_labor,
SUM(lbr.Overhead) AS sum_overhead,
SUM(mtl.Qty) AS sum_qty,
SUM(mtl.material) AS sum_mtl
FROM
(SELECT
DETAIL.HOURS_WORKED AS Hours,
DETAIL.AMOUNT_LABOR AS Labor,
DETAIL.AMT_OVERHEAD AS Overhead
FROM
GT.DETAIL DETAIL
WHERE
DETAIL.LMO = 'L') AS lbr,
(SELECT
DETAIL.HOURS_WORKED AS Qty,
DETAIL.AMOUNT_LABOR AS Material
FROM
GT.DETAIL DETAIL
WHERE
DETAIL.LMO = 'M') AS mtl,
GT.DETAIL DETAIL,
GT.OPERATIONS OPERATIONS,
GT.ORDER ORDER
WHERE
ORDER.JOB = DETAIL.JOB AND
ORDER.SUFFIX = DETAIL.SUFFIX AND
DETAIL.JOB = OPERATIONS.JOB AND
DETAIL.SEQ = OPERATIONS.SEQ AND
DETAIL.SUFFIX = OPERATIONS.SUFFIX
GROUP BY
DETAIL.JOB,
DETAIL.SUFFIX,
ORDER.ORDER_NO,
ORDER.ORDER_LINE,
ORDER.PART,
DETAIL.SEQ,
OPERATIONS.DESCRIPTION
每次我运行上面的代码时,它都会永远运行并最终崩溃。预先感谢您的任何想法。
I'm trying to pull data that contains a job number, order number, part number and description. Some rows in my table are flagged as 'L' for Labor and 'M' for Material. L flagged rows can be taken literally, hours_worked = total hours on job, labor = cost of labor, overhead = cost of overhead. M flagged rows are different, hours_worked = quantity purchased and amount_labor = purchase price of material. How can I differentiate between these two flags and print it into the same table?
Here is what I have so far:
SELECT
DETAIL.JOB,
DETAIL.SUFFIX,
ORDER.ORDER_NO,
ORDER.ORDER_LINE,
ORDER.PART,
DETAIL.SEQ,
OPERATIONS.DESCRIPTION,
SUM(lbr.Hours) AS sum_hours,
SUM(lbr.Labor) AS sum_labor,
SUM(lbr.Overhead) AS sum_overhead,
SUM(mtl.Qty) AS sum_qty,
SUM(mtl.material) AS sum_mtl
FROM
(SELECT
DETAIL.HOURS_WORKED AS Hours,
DETAIL.AMOUNT_LABOR AS Labor,
DETAIL.AMT_OVERHEAD AS Overhead
FROM
GT.DETAIL DETAIL
WHERE
DETAIL.LMO = 'L') AS lbr,
(SELECT
DETAIL.HOURS_WORKED AS Qty,
DETAIL.AMOUNT_LABOR AS Material
FROM
GT.DETAIL DETAIL
WHERE
DETAIL.LMO = 'M') AS mtl,
GT.DETAIL DETAIL,
GT.OPERATIONS OPERATIONS,
GT.ORDER ORDER
WHERE
ORDER.JOB = DETAIL.JOB AND
ORDER.SUFFIX = DETAIL.SUFFIX AND
DETAIL.JOB = OPERATIONS.JOB AND
DETAIL.SEQ = OPERATIONS.SEQ AND
DETAIL.SUFFIX = OPERATIONS.SUFFIX
GROUP BY
DETAIL.JOB,
DETAIL.SUFFIX,
ORDER.ORDER_NO,
ORDER.ORDER_LINE,
ORDER.PART,
DETAIL.SEQ,
OPERATIONS.DESCRIPTION
Every time I run the above, it runs forever and eventually crashes. Thanks in advance for any ideas.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
SQL 已知 LEFT/RIGHT/INNER JOIN 语法已有一段时间了。即使使用像
Pervasive
这样的数据库,您也可以使用这种 JOIN(更多信息:要踢的坏习惯:使用旧式连接)我尝试重写您的查询,使用内部连接。
情况添加到
SUM()
中以进行正确的计算。我不确定您是否需要
WHERE GT.DETAIL.LMO IN ('L','M')
。当您还需要选择LMO
以及L
和/或M
的其他值时,您应该删除 WHERE 子句。SQL has known LEFT/RIGHT/INNER JOIN syntax for some time now. Even when using a database like
Pervasive
you can use that kind of JOINs too (More info: Bad Habits to Kick : Using old-style JOINs)I tried to do a re-write of your query, using INNER JOINs.
The CASE WHEN is added to the
SUM()
to make the correct calculations.I am not sure if you need
WHERE GT.DETAIL.LMO IN ('L','M')
. When you have other values forLMO
thenL
and/orM
which need to be selected too, you should remove the WHERE clause.