簡體   English   中英

從一個表中選擇不同的值並連接到另一個表

[英]Select distinct values from one table and join with another table

我有一個問題,我花了很多時間試圖弄清楚,但幾乎沒有成功。我會盡量描述這個問題,並使用一個例子,這是解決方案我現在用。

我有兩個不同的 MS SQL 表。

表格1:

  • itemNumber - 192031、533853 等。
  • date - 添加數據庫帖子的日期
  • 數量 - 每個項目編號的項目數量

表 2:

  • MTITNO - 也是項目編號,包含許多不同的項目編號(比表 1 多)
  • MTTRDT - 添加數據庫帖子的日期
  • MTTYP - 交易類型。 我將尋找 MTTYP = 11
  • MTTRQT - 交易數量。 我將尋找 MTTRQT < 0

所以我想要做的是從表 1 中的兩個日期之間獲取 DISTINCT itemNumber。一旦我有了這些項目編號,我想加入表 2 的項目編號,以及我在查詢表中使用的相同日期之間1. 我也只需要從表 2 中獲取值,其中 MTTYP = 11 和 MTTRQT < 0 和 SUM MTTRQT。

我已經通過在 Java 代碼中使用循環對其進行了排序,老實說這不太好。 我做的是這樣的:

  1. SELECT DISTINCT itemNumber "itemNumber"
    從表 1
    在@fromDate 和@toDate 之間的日期;

  2. 從此結果中取最高值(即第一個項目編號),然后:

  3. 選擇總和(MTTRQT)“SUM_MTTRQT_”
    從表 2
    WHERE MTITNO = "上面查詢結果的第一個項目編號"
    和 MTTTYP = 11
    和 MTTRDT 在 @fromDate 和 @toDate 之間
    和 MITTRA.MTTRQT < 0

  4. 將結果添加到新列表中。 刪除使用的項目編號

  5. 循環遍歷列表中的所有項目編號,並對每個項目編號運行第 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM