Как выбрать значение путем сравнения нескольких таблиц (MS SQL, VB .NET)
Всем Привет,
Я не являюсь экспертом по MS SQL 2017 или VB .Net 2019, но пытаюсь сделать небольшой проект с моими знаниями. Мне нужна помощь, чтобы извлечь запись из нескольких таблиц и удалить их в зависимости от условий. Ниже приведена структура таблицы:
1-й стол (
Inward_Part) :
select * from Inward_Part
Intenal_no|IP_InDt|IP_Desc|IP_DaNo|IP_PartName|IP_JobRate|IP_In_Qty|IP_TotVal|IP_Out_Qty|IP_Qty_Balance|IP_Progress_Status 1|2020-01-21|Desc Added|da1|Part1|50.00|50.00|2500.00|50.00|0.00|close 2|2020-01-25|Desc Added|da2|Part1|50.00|50.00|2500.00|50.00|0.00|semi-close 4|2020-01-25|Desc Added|da4|Part1|50.00|50.00|2500.00|30.00|20.00|progress 5|2020-01-25|Desc Added|da5|Part1|50.00|50.00|2500.00|50.00|0.00|close 3|2020-01-25|Desc Added|da3|Part1|50.00|50.00|2500.00|50.00|0.00|semi-close
2-й стол (
Outward_Master_Info):
select * from Outward_Master_Info
DC_Internal_no|DC_no|DC_Date|DC_PartName|DC_TotalQty|DC_TotalVal|Remarks|Status 1|20180001 |2020-01-21|Part1|40.00|2000.00||Close 2|20180002 |2020-01-21|Part1|40.00|2000.00||Close 3|20180003 |2020-01-21|Part1|50.00|2500.00||Close 4|20180004 |2020-01-21|Part1|10.00|500.00||Open 6|20180006 |2020-01-21|Part1|10.00|500.00||Open 5|20180005 |2020-01-21|Part1|30.00|1500.00||Open 7|20180007 |2020-01-21|Part1|50.00|2500.00||Close
3-й стол (
Outward_Parts_info) :
select * from Outward_Parts_info
Part_Internal_no|Part_DC_no|Part_DA_No|Part_DA_Job_Rate|Part_Qty|Part_Val|Part_Status 1|20180001 |da1|50.00|20.00|1000.00|close 2|20180001 |da2|50.00|20.00|1000.00|close 3|20180002 |da1|50.00|20.00|1000.00|close 4|20180002 |da3|50.00|20.00|1000.00|close 5|20180003 |da1|50.00|10.00|500.00|close 6|20180003 |da2|50.00|20.00|1000.00|close 7|20180003 |da4|50.00|20.00|1000.00|close 12|20180006 |da3|50.00|10.00|500.00|Open 9|20180004 |da2|50.00|10.00|500.00|Open 10|20180005 |da3|50.00|20.00|1000.00|Open 11|20180005 |da4|50.00|10.00|500.00|Open 13|20180007 |da5|50.00|50.00|2500.00|close
Теперь мне нужно удалить
IP_DaNoиз таблицы 1 и
DC_noиз табл. 2 и 3 видно, что все DA и DC закрыты, а также когда только общая сумма
Part_DA_Noкол-во в таблице 3 равно входному кол-во в таблице 1, и все они должны быть в состоянии закрытия
Например из приведенной выше записи мне нужно удалить записи da5 из таблицы 3 и таблицы 1 и соответствующий ей DC no (
20180007) только из таблицы 2.
если мы видим из приведенного выше примера, что da1 также закрыт и его выходное кол-во совпадает с входным кол-во, Но
20180001DC имеет два da (da1 и da2), в которых da2 не закрыт полностью в таблице 3, поэтому эта запись не должна быть удалена
Что я уже пробовал:
то, что я попробовал, - это следующий запрос
1:
select * from Inward_Part IP, (select sum(Part_Qty) qtysum,Part_DA_No from Outward_Parts_info where Part_Status ='close' group by Part_DA_No) SMV where ip.IP_Out_Qty = SMV.qtysum and ip.IP_Progress_Status = 'close' and ip.IP_DaNo = SMV.Part_DA_No
но запрос извлекает как запись da1, так и запись da5
Цитата:Intenal_no|IP_InDt|IP_Desc|IP_DaNo|IP_PartName|IP_JobRate|IP_In_Qty|IP_TotVal|IP_Out_Qty|IP_Qty_Balance|IP_Progress_Status|qtysum|Part_DA_No
1/2020-01-21|описание добавил|Да1|Часть1|50.00|50.00|2500.00|50.00|0.00|закрыть|50.00|Да1
5/2020-01-25|Desc Added|da5|Part1|50.00|50.00|2500.00|50.00|0.00|закрыть|50.00|da5
2: это также приносит как da1, так и da5 запись
select distinct IP.IP_DaNo from Inward_Part IP, Outward_Master_Info OM, Outward_Parts_info OP where IP.IP_Progress_Status = 'close' and ip.IP_DaNo = op.Part_DA_No and op.Part_DC_no = om.DC_no and op.Part_Status = 'close' and om.Status = 'close'
IP_DaNo da1 da5
Пожалуйста, помогите мне с запросом, чтобы получить все das (например, da5), чей статус близок и входное кол-во в таблице 1 равно сумме выходящего кол-во в таблице 3 (группа по da_nos)
Спасибо и с уважением
НС