我有一个问题,我花了很多时间试图弄清楚,但几乎没有成功。.我将尽我所能描述问题,并举一个例子,是我现在使用的解决方案。
我有两个不同的MS SQL表。
表1:
表2:
所以我要做的是从表1的两个日期之间获得DISTINCT itemNumber。一旦有了这些项目号,我就希望将表2加入到项目号上,并且还要在我使用的相同日期之间查询表1。我还只需要从表2中获取值,其中MTTYP = 11且MTTRQT <0且SUM MTTRQT。
我已经通过使用Java代码中的循环对它进行了排序,说实话这不好。我的工作是这样:
SELECT DISTINCT itemNumber“ itemNumber”
表1
@fromDate和@toDate之间的日期;
从此结果中获取最高值(即第一个商品编号),然后:
SELECT Sum(MTTRQT)“ SUM_MTTRQT_”
从表2
WHERE MTITNO =“来自上面结果查询的第一个商品编号”
AND MTTTYP = 11
@fromDate和@toDate之间的AND MTTRDT
AND MITTRA.MTTRQT <0
将结果添加到新列表。删除使用的商品编号
浏览列表中的所有项目编号,并对每个项目编号运行步骤3和4(这是很糟糕的部分)。
当然必须有一个产生相同结果的SQL查询!
感谢我可以获得的任何帮助!
更新:
这是我的数据。
表1
|Item number | Quantity | date
192031 | 1 | 20190521
192031 | 1 | 20190522
19192301 | 2 | 20190521
19189507 | 1 | 20190523
19189507 | 1 | 20190521
19189507 | 1 | 20190524
表2
|MTITNO | MTTRDT | MTTTYP | MTTRQT
192031 | 20190520 | 11 | -1
192031 | 20190520 | 11 | -1
192031 | 20190520 | 11 | -1
192031 | 20190520 | 11 | -1
19189507 | 20190520 | 11 | -1
19189507 | 20190520 | 11 | -1
19189507 | 20190520 | 11 | -1
19189507 | 20190520 | 11 | -1
19189507 | 20190521 | 11 | -1
19189507 | 20190521 | 11 | -1
19189507 | 20190521 | 11 | -1
表2包含各种项目编号(即,您可以在表2中找到的项目编号,但在表1中找不到),以及更多的帖子。表1中可以有一个帖子,表2中没有一个或多个项目编号的帖子。
我想总结所有项目的MTTRQT,其中项目编号在表1和表2中以及在我设置的日期范围内。以下期望结果中的“已用数量”是每个商品编号的MTTRQT。
所需结果
因此,如果我查找日期在20190520-20190524之间的所有商品编号,则应获得以下列表。
表1中的“物料编号”应该是DISTINCT物料编号。
“已用金额”是SUM函数,用于求和满足所有条件的MTTRQT。
|Item Number | Amount used
192031 | -4
19189507 | -7
答案 0 :(得分:1)
通读一些话,但这不是你所追求的吗?
SELECT SUM(T2.MTTRQT) AS [SUM_MTTRQT_]
FROM [Table 2] T2
LEFT JOIN (SELECT TOP (1)
T1.ItemNumber
FROM [Table 1] T1
WHERE T1.[date] BETWEEN @fromDate AND @toDate --Note, if [date] has a time portion, this is unlikely to work as you expect
ORDER BY T1.ItemNumber) T1 ON T2.MTITNO = T1.ItemNumber --Assumed ORDER BY clause
WHERE T2.MTTTYP = 11
AND T2.MTTRDT BETWEEN @fromDate AND @toDate --Note, if MTTRDT has a time portion, this is unlikely to work as you expect
AND T2.MITTRA.MTTRQT < 0;
答案 1 :(得分:1)
如果我正确地遵循了您的逻辑:
select sum(mttrqt)
from table2 t2
where t2.mtitno in (select t1.itemno
from table1 t1
where t1.date >= @date1 and t1.date <= @date2
) and
t2.mttrdt >= @date1 and
t2.mttrdt <= @date1 and
t2.mttype = 11 and
t2.mttrqt < 10;
答案 2 :(得分:0)
您尝试过吗:
SELECT Sum(MTTRQT) "SUM_MTTRQT_"
FROM Table 2
WHERE MTITNO in (SELECT DISTINCT itemNumber "itemNumber"
FROM Table 1
WHERE date BETWEEN @fromDate AND @toDate;)
AND MTTTYP = 11
AND MTTRDT BETWEEN @fromDate AND @toDate
AND MITTRA.MTTRQT < 0