[英]Select distinct values from one table and join with another table
我有一個問題,我花了很多時間試圖弄清楚,但幾乎沒有成功。我會盡量描述這個問題,並使用一個例子,這是解決方案我現在用。
我有兩個不同的 MS SQL 表。
表格1:
表 2:
所以我想要做的是從表 1 中的兩個日期之間獲取 DISTINCT itemNumber。一旦我有了這些項目編號,我想加入表 2 的項目編號,以及我在查詢表中使用的相同日期之間1. 我也只需要從表 2 中獲取值,其中 MTTYP = 11 和 MTTRQT < 0 和 SUM MTTRQT。
我已經通過在 Java 代碼中使用循環對其進行了排序,老實說這不太好。 我做的是這樣的:
SELECT DISTINCT itemNumber "itemNumber"
從表 1
在@fromDate 和@toDate 之間的日期;
從此結果中取最高值(即第一個項目編號),然后:
選擇總和(MTTRQT)“SUM_MTTRQT_”
從表 2
WHERE MTITNO = "上面查詢結果的第一個項目編號"
和 MTTTYP = 11
和 MTTRDT 在 @fromDate 和 @toDate 之間
和 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 中沒有帖子。
我想總結一下項目編號在表 1 和表 2 中以及在我設置的日期范圍內的所有項目的 MTTRQT。 下面所需結果中的“使用量”是每個單個項目編號的 MTTRQT 相加。
想要的結果
因此,如果我查找日期在 20190520 - 20190524 之間的所有項目編號,我應該得到下面的列表。
“項目編號”應該是表 1 中的 DISTINCT 項目編號。
“使用量”是 SUM 函數,它對滿足所有條件的 MTTRQT 求和。
|Item Number | Amount used
192031 | -4
19189507 | -7
稍微通讀一下,但這不是你想要的嗎?
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;
如果我正確地遵循您的邏輯:
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;
你有沒有試過這個:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.