尝试将两个查询加在一起
Trying to add two queries together
我想再添加一列来计算剩余的行数,
我不想包含我的计划数量与完成数量相匹配的行
(plan_qty != cmp_qty)
SELECT od_f.ob_oid Order,
Sum(plan_qty) Plan_Units,
sum(cmp_qty) Completed_Units,
Round(((Sum(cmp_qty)/sum(plan_qty)) * 100.00),2)Percent_Cmp,
total_value Value,
SUM(round(cmp_qty * unit_price,2)) cmp_value
FROM od_f,
om_f
WHERE od_f.ob_oid = om_f.ob_oid
GROUP BY od_f.ob_oid, total_value
ORDER BY Percent_Cmp desc
这是一个查询,returns 我想要的新列
SELECT count(od_rid)
FROM od_f
WHERE od_f.plan_qty != od_f.cmp_qty
GROUP BY od_f.ob_oid
我无法添加上面的 where 语句,因为它会影响我的结果。
我真的不知道该怎么做,将这些查询组合成一个子查询?某种工会?我不知道该怎么做。
感谢您的帮助
您可以根据需要使用条件聚合。虽然 COUNT()
和 CASE
可能就足够了,但我最好的猜测是 COUNT(DISTINCT)
:
SELECT od_f.ob_oid Order,
Sum(plan_qty) Plan_Units,
sum(cmp_qty) Completed_Units,
Round(((Sum(cmp_qty)/sum(plan_qty)) * 100.00),2)Percent_Cmp,
total_value Value,
SUM(round(cmp_qty * unit_price,2)) cmp_value,
COUNT(DISTINCT CASE WHEN od_f.plan_qty <> od_f.cmp_qty THEN od_f. od_rid END) as newcol
FROM od_f JOIN
om_f
ON od_f.ob_oid = om_f.ob_oid
GROUP BY od_f.ob_oid, total_value
ORDER BY Percent_Cmp desc;
您还应该学习使用正确、明确的 JOIN
语法。简单规则:从不 在 FROM
子句中使用逗号。
@GordonLinoff 解决方案对你有好处,但前提是你想计算唯一性 od_rid ,这个解决方案适用于这两种情况,使用相关查询:
SELECT t.ob_oid Order,
Sum(plan_qty) Plan_Units,
sum(cmp_qty) Completed_Units,
Round(((Sum(cmp_qty)/sum(plan_qty)) * 100.00),2)Percent_Cmp,
total_value Value,
SUM(round(cmp_qty * unit_price,2)) cmp_value,
(SELECT count(f2.od_rid) FROM od_f f2
WHERE f2.plan_qty != f2.cmp_qty and f2.ob_oid = f.ob_oid) as newcolumn
FROM od_f t
INNER JOIN om_f
ON t.ob_oid = om_f.ob_oid
GROUP BY t.ob_oid, total_value
ORDER BY Percent_Cmp desc
据我了解,您只需要 plan_qty
不等于 cmp_qty
的行数,试试这个:
SELECT t.ob_oid AS order,
SUM(plan_qty) AS plan_units,
SUM(cmp_qty) AS completed_units,
ROUND(((SUM(cmp_qty)/SUM(plan_qty)) * 100),2) AS percent_cmp,
total_value AS value,
SUM(ROUND(cmp_qty * unit_price,2)) AS cmp_value,
SUM(DECODE(plan_qty, cmp_qty, 0, 1)) AS rows_left
FROM od_f t
INNER JOIN om_f
ON t.ob_oid = om_f.ob_oid
GROUP BY t.ob_oid, total_value
ORDER BY percent_cmp DESC;
我想再添加一列来计算剩余的行数,
我不想包含我的计划数量与完成数量相匹配的行
(plan_qty != cmp_qty)
SELECT od_f.ob_oid Order,
Sum(plan_qty) Plan_Units,
sum(cmp_qty) Completed_Units,
Round(((Sum(cmp_qty)/sum(plan_qty)) * 100.00),2)Percent_Cmp,
total_value Value,
SUM(round(cmp_qty * unit_price,2)) cmp_value
FROM od_f,
om_f
WHERE od_f.ob_oid = om_f.ob_oid
GROUP BY od_f.ob_oid, total_value
ORDER BY Percent_Cmp desc
这是一个查询,returns 我想要的新列
SELECT count(od_rid)
FROM od_f
WHERE od_f.plan_qty != od_f.cmp_qty
GROUP BY od_f.ob_oid
我无法添加上面的 where 语句,因为它会影响我的结果。
我真的不知道该怎么做,将这些查询组合成一个子查询?某种工会?我不知道该怎么做。
感谢您的帮助
您可以根据需要使用条件聚合。虽然 COUNT()
和 CASE
可能就足够了,但我最好的猜测是 COUNT(DISTINCT)
:
SELECT od_f.ob_oid Order,
Sum(plan_qty) Plan_Units,
sum(cmp_qty) Completed_Units,
Round(((Sum(cmp_qty)/sum(plan_qty)) * 100.00),2)Percent_Cmp,
total_value Value,
SUM(round(cmp_qty * unit_price,2)) cmp_value,
COUNT(DISTINCT CASE WHEN od_f.plan_qty <> od_f.cmp_qty THEN od_f. od_rid END) as newcol
FROM od_f JOIN
om_f
ON od_f.ob_oid = om_f.ob_oid
GROUP BY od_f.ob_oid, total_value
ORDER BY Percent_Cmp desc;
您还应该学习使用正确、明确的 JOIN
语法。简单规则:从不 在 FROM
子句中使用逗号。
@GordonLinoff 解决方案对你有好处,但前提是你想计算唯一性 od_rid ,这个解决方案适用于这两种情况,使用相关查询:
SELECT t.ob_oid Order,
Sum(plan_qty) Plan_Units,
sum(cmp_qty) Completed_Units,
Round(((Sum(cmp_qty)/sum(plan_qty)) * 100.00),2)Percent_Cmp,
total_value Value,
SUM(round(cmp_qty * unit_price,2)) cmp_value,
(SELECT count(f2.od_rid) FROM od_f f2
WHERE f2.plan_qty != f2.cmp_qty and f2.ob_oid = f.ob_oid) as newcolumn
FROM od_f t
INNER JOIN om_f
ON t.ob_oid = om_f.ob_oid
GROUP BY t.ob_oid, total_value
ORDER BY Percent_Cmp desc
据我了解,您只需要 plan_qty
不等于 cmp_qty
的行数,试试这个:
SELECT t.ob_oid AS order,
SUM(plan_qty) AS plan_units,
SUM(cmp_qty) AS completed_units,
ROUND(((SUM(cmp_qty)/SUM(plan_qty)) * 100),2) AS percent_cmp,
total_value AS value,
SUM(ROUND(cmp_qty * unit_price,2)) AS cmp_value,
SUM(DECODE(plan_qty, cmp_qty, 0, 1)) AS rows_left
FROM od_f t
INNER JOIN om_f
ON t.ob_oid = om_f.ob_oid
GROUP BY t.ob_oid, total_value
ORDER BY percent_cmp DESC;