用于合并两个表中数据的sql查询
我正在尝试为Oracle编写一个查询。我有三张桌子:用于合并两个表中数据的sql查询,sql,oracle,Sql,Oracle,我正在尝试为Oracle编写一个查询。我有三张桌子: sale ==================================== sale_id | part_id | amt | cost | qty quote ============================== quote_id | part_id | amt | qty part ================ part_id | number 我需要编写一个查询,按照零件号对编号进行分组,类似于此非功能查询:
sale
====================================
sale_id | part_id | amt | cost | qty
quote
==============================
quote_id | part_id | amt | qty
part
================
part_id | number
我需要编写一个查询,按照零件号对编号进行分组,类似于此非功能查询:
select p.number
sum(s.amt * s.qty) as sales_amt_total,
sum(s.qty) as sales_qty_total,
count(s.sale_id) as sales_count,
sum(s.qty * s.cost) as cost_total,
sum(q.amt * q.qty) as quotes_amt_total,
sum(q.qty) as quotes_qty_total,
count(q.quote_id) as quotes_count
from parts p
inner join quotes q on q.part_id = p.part_id
inner join sales s on s.part_id = p.part_id
group by p.number
having sales_amt_total < ?
and sales_amt_total > ?
and sales_qty_total < ?
and sales_qty_total > ?
and sales_count < ?
and sales_count > ?
and cost_total < ?
and cost_total > ?
and quotes_amt_total < ?
and quotes_amt_total > ?
and quotes_qty_total < ?
and quotes_qty_total > ?
and quotes_count < ?
and quotes_count > ?
;
但是,内部联接报价和内部联接销售创建了膨胀的数字,因为它每次都在计算每个匹配项
我可以将这些问题分为两个问题:
select p.number
sum(s.amt * s.qty) as sales_amt_total,
sum(s.qty) as sales_qty_total,
count(s.sale_id) as sales_count,
sum(s.qty * s.cost) as cost_total,
from parts p
inner join sales s on s.part_id = p.part_id
having sales_amt_total < ?
and sales_amt_total > ?
and sales_qty_total < ?
and sales_qty_total > ?
and sales_count < ?
and sales_count > ?
and cost_total < ?
and cost_total > ?
;
select p.number
sum(q.amt * q.qty) as quotes_amt_total,
sum(q.qty) as quotes_qty_total,
count(q.quote_id) as quotes_count
from parts p
inner join quotes q on q.part_id = p.part_id
group by p.number
having quotes_amt_total < ?
and quotes_amt_total > ?
and quotes_qty_total < ?
and quotes_qty_total > ?
and quotes_count < ?
and quotes_count > ?
;
但是我失去了将having子句应用于每个表的能力
您将如何创建此查询?类似于以下内容:
WITH ctePART_QUOTES AS
(SELECT qq.PART_ID,
COUNT(*) AS QUOTES_COUNT
SUM(qq.AMT * qq.QTY) AS QUOTES_AMT_TOTAL,
SUM(qq.QTY) as QUOTES_QTY_TOTAL
FROM QUOTES qq
GROUP BY qq.PART_ID),
ctePART_SALES AS
(SELECT ss.PART_ID,
COUNT(*) AS SALES_COUNT,
SUM(ss.AMT * ss.QTY) AS SALES_AMT_TOTAL,
SUM(ss.QTY) AS SALES_QTY_TOTAL,
COUNT(*) AS SALES_COUNT,
SUM(ss.QTY * ss.COST) AS COST_TOTAL
FROM SALES ss
GROUP BY ss.PART_ID)
SELECT p.NUMBER,
s.SALES_AMT_TOTAL,
s.SALES_QTY_TOTAL,
s.SALES_COUNT,
s.COST_TOTAL,
q.QUOTES_AMT_TOTAL,
q.QUOTES_QTY_TOTAL,
q.QUOTES_COUNT
FROM PARTS p
LEFT OUTER JOIN ctePART_QUOTES q
ON q.PART_ID = p.PART_ID
LEFT OUTER JOIN ctePART_SALES s
ON s.PART_ID = p.PART_ID
加上你所有的东西,你应该很好去
祝你好运。向我们展示非功能性查询实际上对理解你的观点没有多大帮助。相反,请向我们展示样本表数据和预期输出。如果我能让它发挥作用,我就不会问问题样本输出在问题中如果你不能清楚地表达输入和输出数据,那么你要么不理解你自己的问题,或者你还没有充分考虑到它。只是考虑伪代码是为了传达功能,而不需要过度解释。
WITH ctePART_QUOTES AS
(SELECT qq.PART_ID,
COUNT(*) AS QUOTES_COUNT
SUM(qq.AMT * qq.QTY) AS QUOTES_AMT_TOTAL,
SUM(qq.QTY) as QUOTES_QTY_TOTAL
FROM QUOTES qq
GROUP BY qq.PART_ID),
ctePART_SALES AS
(SELECT ss.PART_ID,
COUNT(*) AS SALES_COUNT,
SUM(ss.AMT * ss.QTY) AS SALES_AMT_TOTAL,
SUM(ss.QTY) AS SALES_QTY_TOTAL,
COUNT(*) AS SALES_COUNT,
SUM(ss.QTY * ss.COST) AS COST_TOTAL
FROM SALES ss
GROUP BY ss.PART_ID)
SELECT p.NUMBER,
s.SALES_AMT_TOTAL,
s.SALES_QTY_TOTAL,
s.SALES_COUNT,
s.COST_TOTAL,
q.QUOTES_AMT_TOTAL,
q.QUOTES_QTY_TOTAL,
q.QUOTES_COUNT
FROM PARTS p
LEFT OUTER JOIN ctePART_QUOTES q
ON q.PART_ID = p.PART_ID
LEFT OUTER JOIN ctePART_SALES s
ON s.PART_ID = p.PART_ID