1

これは、以前の質問hereの拡張です

昨日と今日の2つのテーブルがあり、各テーブルには2つの列があります

StockNumber, StockLevel

どうすればわかりますか

  1. StockLevel に違いがある StockNumbers のみ
  2. 影響を受ける StockNumber と StockLevel の値を返します

例えば:

今日のテーブル :

StockNumber, StockLevel
ABC, 10
CBA,5
123,5

昨日のテーブル :

StockNumber, StockLevel
ABC, 9
CBA,5
123,10

次の wi を返すには

StockNumber, StockLevel
ABC, 10
123, 5

StockNumber "ABC" は今日の値 10 を返し、StockNumber "123" も今日の値 5 を返し、StockNumber "CBA" は変化がなく、返されないことに注意してください。

どうもありがとう、

マット

4

5 に答える 5

3

これは、両方の日に存在した株に対してそれを行います。

SELECT t.StockNumber, t.StockLevel
FROM today t
JOIN yesterday y
  ON t.StockNumber=y.StockNumber
 AND t.StockLevel <> y.StockLevel

(前の質問のように)今日の新しい株も含めたい場合。

SELECT t.StockNumber, t.StockLevel
FROM today t
LEFT JOIN yesterday y
  ON t.StockNumber = y.StockNumber
WHERE y.StockNumber IS NULL 
   OR t.StockLevel <> y.StockLevel

で両方をテストするSQLfiddle

于 2013-02-24T16:23:17.727 に答える
0

2つのテーブルに異なるアイテムがある可能性があるため、これは少し注意が必要です。私はこれのためにすべての組合とグループ化をお勧めします:

select stockNumer,
       max(case when which = 'yesterday' then stocklevel end) as yesterdaylevel,
       max(case when which = 'today' then stocklevel end) as todaylevel
from ((select StockNumber, StockLevel, 'yesterday' as which
       from yesterday
      ) union all
      (select StockNumber, StockLevel, 'today' as which
       from today
      )
     ) t
group by stockNumber
having min(StockLevel) <> max(stockLevel) and count(*) = 2
于 2013-02-24T16:22:06.460 に答える
0
select T.StockNumber, T.StockLevel 
from Today as T 
left join Yesterday as Y 
on T.StockNumber = Y.StockNumber 
WHERE T.StockLevel <> Y.StockLevel

ここで結果を試してみてください:http ://sqlfiddle.com/#!2 / 367b0 / 3/0

于 2013-02-24T16:27:43.347 に答える
0

次のクエリは、昨日とは ( によってStockLevel) 異なる株式、または昨日存在しなかった株式 (これが目的でLEFTありIS NULL、目的)を返します。

SELECT Today.*
FROM Today LEFT JOIN Yesterday
    ON Today.StockNumber = Yesterday.StockNumber
WHERE
    Today.StockLevel <> Yesterday.StockLevel
    OR Yesterday.StockLevel IS NULL
于 2013-02-24T16:41:07.187 に答える
0

StockNumber でテーブルを結合し、それらの行を選択できますWHERE NOT A.StockLevel = B.StockLevel

于 2013-02-24T16:18:36.150 に答える