0

我需要帮助从两个表中提取精确项匹配。我想从Detail Table中获取Temp Detail和Master和Temp Master itemQty中存在的所有订单都是一样的。SQL Server - 主/细节 - 获取提取精确细节项匹配

示例:在这种情况下,我需要master.Amount的总和,其中ItemQty是3,而细节表具有完全相同的Temp值Detail。

OrderId|  Amount | ItemQty |Status 
------------------------------------------ 
125 |  36.75 | 3 | A | 
------------------------------------------ 
128 |  11.95 | 5 | A | 
------------------------------------------ 

详细含有大量订单的详细信息的

------------------------------------------ 
OrderId| ItemId | Qty | Price  | 
------------------------------------------ 
125 |  12345 | 1 | 11.00  | 
------------------------------------------ 
125 |  23456 | 1 | 12.75  | 
------------------------------------------ 
125 |  34567 | 1 | 13.00  | 
------------------------------------------ 

临时主控

------------------------------------------ 
|OrderId|  Amount | ItemQty |Status 
------------------------------------------ 
|9999 |  36.75 | 3 | A | 
------------------------------------------ 

温度详细

------------------------------------------ 
|OrderId | ItemId | Qty | Price  | 
------------------------------------------ 
| 9999 | 12345 | 1 | 11.00  | 
------------------------------------------ 
| 9999 | 23456 | 1 | 12.75  | 
------------------------------------------ 
| 9999 | 34567 | 1 | 13.00  | 
------------------------------------------ 

预先感谢您

+0

谢谢约翰·卡佩莱蒂,我不知道如何格式化它。 –

+0

不用担心,在未来只是希望的文本,并单击{}按钮:) –

回答

0

你可以像这样

select m.OrderId, sum(m.amount) 
from master m 
join detail d 
on m.OrderId = d.OrderId 
join tempDetail td 
on m.OrderId = td.OrderId 
where m.ItemQty = 3 
group by m.OrderId 
having sum(d.Qty * d.Price) = sum(td.Qty * td.Price) 
+0

嗨,斯特凡诺,谢谢你,事情是温度 - 硕士和硕士有不同的命令ID,我需要在哪里详细记录是相同的对于这两张表,不管这两位主人有不同的订单ID或金额。 –

+0

好吧,明白了。一个问题:在你的例子中,细节表上的数量和数量列与主表记录上的值完全匹配(如36.75 = 11 + 12.75 + 13)。情况总是如此吗? –

0

我最好的猜测尝试:

select Masterr.OrderId, 
     sum(Masterr.Amount) 
    from Masterr 
where Masterr.ItemQty = 3 
    and exists(select * 
       from Detail 
       join TempMaster on TempMaster.ItemQty = Masterr.ItemQty 
       join TempDetail on TempDetail.OrderId = TempMaster.OrderId 
       where Detail.OrderId = Masterr.OrderId 
       and TempDetail.ItemId = Detail.ItemId 
       and TempDetail.Qty  = Detail.Qty 
       and TempDetail.Price = Detail.Price) 
group by Masterr.OrderId;