2

id 、 sku 、 amount 、 columns を持つ製品テーブルがあります。
id と sku は一意の列です。

       products table 
  ---------------------------                                
      sku         |  amount
  ----------------|----------
  1-13-013-000    |  765.00
  4-670-140-NB12  |  864.00
  4-670-153f-NS16 |  912.00
  5-616-40        |  86.00

別のテーブルは id 、 sku 、 balance の動き
です。このテーブルでは id のみが一意です。

       movements table           
  id |  sku           | balance
  ---|----------------|----------
  1  |  5-51-51       |  765.00
  2  |  5-616-40      |  11.00
  3  |  5-704-40      |  709.00
  4  |  5-616-40      |  67.00
  5  |  1-13-013-000  |  414.00
  6  |  5-704-40      |  415.00 
  7  |  4-670-140-NB12|  313.00 
  8  |  5-616-40      |  79.00
  9  |  1-83-019-2    |  11.00  
  10 |  5-616-40      |  86.00
  11 |  4-670-140-NB12|  811.00
  12 |  1-13-013-000  |  765.00

動きがある場合は製品テーブルのすべての SKU を比較してチェックし
(したがって、動きテーブルをチェックインする必要があります)、動きテーブルの最高 ID
で最後の動きを見つけ、残高と金額を比較します。
この結果を出したい

  --------------------------------------                                
      sku         |  amount    | balance
  ----------------|------------|--------
  1-13-013-000    |  765.00    | 765.00 
  4-670-140-NB12  |  864.00    | 811.00  <- No match 
  4-670-153f-NS16 |  912.00    |         <-no movement
  5-616-40        |  86.00     | 79.00 

コメントは必要ありません。助け<- No matchていただければ幸いです。 読んでくれてありがとう、 アロン <-no movement


4

2 に答える 2

0

MAXムーブメントテーブルからを取得しようとしている場合、結果は正しくないように見えます。

id |  sku           | balance
---|----------------|----------
1  |  5-51-51       |  765.00
2  |  5-616-40      |  11.00
3  |  5-704-40      |  709.00
4  |  5-616-40      |  67.00
5  |  1-13-013-000  |  414.00
6  |  5-704-40      |  415.00 
7  |  4-670-140-NB12|  313.00 
8  |  5-616-40      |  79.00
9  |  1-83-019-2    |  11.00  
10 |  5-616-40      |  86.00    <-- Max of 5-616-40
11 |  4-670-140-NB12|  811.00   <-- Max of 
12 |  1-13-013-000  |  765.00   <-- Max of 1-13-013-000

これにより、望ましい結果が得られるはずです。

SELECT p.sku, p.amount, m.balance
FROM products p
LEFT JOIN
    (SELECT sku, MAX(balance) AS balance FROM movements
    GROUP BY sku) m ON m.sku = p.sku

結果

| SKU | 金額| バランス|
--------------------------------------
| 1-13-013-000 | 765 | 765 |
| 4-670-140-NB12 | 864 | 811 |
| 4-670-153f-NS16 | 912 | (null)|
| 5-616-40 | 86 | 86 |

実際に見てください

于 2013-01-12T19:55:12.433 に答える
0

次のコードが機能します。

SELECT
    p.Sku,
    p.Amount,
    m.Balance
FROM
    TestMovements AS m
    INNER JOIN
    (
        SELECT
            MAX(Id) AS Id
        FROM
            TestMovements
        GROUP BY
            Sku
    ) AS MaxIds
    ON
        m.Id = MaxIds.Id
    RIGHT OUTER JOIN
    TestProducts AS p
    ON
        m.Sku = p.Sku
于 2013-01-12T20:07:47.140 に答える