Member 14714681 Ответов: 2

Как выбрать значение путем сравнения нескольких таблиц (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 также закрыт и его выходное кол-во совпадает с входным кол-во, Но
20180001
DC имеет два 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)

Спасибо и с уважением
НС

2 Ответов

Рейтинг:
1

OriginalGriff

Вам нужно присоединиться: SQL-соединения[^]


Maciej Los

Коротко И По Существу!

OriginalGriff

Я не пробираюсь через эту структуру данных для него: плохо спроектированная, куча повторяющихся данных ...
Он нуждается в правильном взгляде и серьезной дозе рационализации. Его вопросы, вероятно, стали бы довольно тривиальными, если бы он сделал это ...

Рейтинг:
1

Maciej Los

В дополнение к решению №1 от OriginalGriff, я бы посоветовал прочитать эту превосходную статью: Визуальное представление SQL-соединений[^]