2017-06-26 8 views
1

sqlには私たちが持っている各アイテムの履歴テーブルがあり、それぞれのアクションの数量を記録することができます。私たちは、それがアウトのかの活動だかどうかに基づいている項目のどのように多くのランニングカウントを取得しようとしているここに私の最後のSQLは次のとおりです。SQL実行中のSUMとOVERの合計

SELECT itemid, 
     activitydate, 
     activitycode, 
     SUM(quantity) AS quantity, 
     SUM(CASE WHEN activitycode = 'IN' 
      THEN quantity 
      WHEN activitycode = 'OUT' 
      THEN -quantity 
      ELSE 0 END) OVER (PARTITION BY itemid ORDER BY activitydate rows unbounded preceding) AS runningcount 
FROM itemhistory 
GROUP BY itemid, 
     activitydate, 
     activitycode 

この結果をに:

+--------+-------------------------+--------------+----------+--------------+ 
| itemid |  activitydate  | activitycode | quantity | runningcount | 
+--------+-------------------------+--------------+----------+--------------+ 
|  1 | 2017-06-08 13:58:00.000 | IN   |  1 |   1 | 
|  1 | 2017-06-08 16:02:00.000 | IN   |  6 |   2 | 
|  1 | 2017-06-15 11:43:00.000 | OUT   |  3 |   1 | 
|  1 | 2017-06-19 12:36:00.000 | IN   |  1 |   2 | 
|  2 | 2017-06-08 13:50:00.000 | IN   |  5 |   1 | 
|  2 | 2017-06-12 12:41:00.000 | IN   |  4 |   2 | 
|  2 | 2017-06-15 11:38:00.000 | OUT   |  2 |   1 | 
|  2 | 2017-06-20 12:54:00.000 | IN   |  15 |   2 | 
|  2 | 2017-06-08 13:52:00.000 | IN   |  5 |   3 | 
|  2 | 2017-06-12 13:09:00.000 | IN   |  1 |   4 | 
|  2 | 2017-06-15 11:47:00.000 | OUT   |  1 |   3 | 
|  2 | 2017-06-20 13:14:00.000 | IN   |  1 |   4 | 
+--------+-------------------------+--------------+----------+--------------+ 

私は最終的な結果は次のようになりたい:

+--------+-------------------------+--------------+----------+--------------+ 
| itemid |  activitydate  | activitycode | quantity | runningcount | 
+--------+-------------------------+--------------+----------+--------------+ 
|  1 | 2017-06-08 13:58:00.000 | IN   |  1 |   1 | 
|  1 | 2017-06-08 16:02:00.000 | IN   |  6 |   7 | 
|  1 | 2017-06-15 11:43:00.000 | OUT   |  3 |   4 | 
|  1 | 2017-06-19 12:36:00.000 | IN   |  1 |   5 | 
|  2 | 2017-06-08 13:50:00.000 | IN   |  5 |   5 | 
|  2 | 2017-06-12 12:41:00.000 | IN   |  4 |   9 | 
|  2 | 2017-06-15 11:38:00.000 | OUT   |  2 |   7 | 
|  2 | 2017-06-20 12:54:00.000 | IN   |  15 |   22 | 
|  2 | 2017-06-08 13:52:00.000 | IN   |  5 |   27 | 
|  2 | 2017-06-12 13:09:00.000 | IN   |  1 |   28 | 
|  2 | 2017-06-15 11:47:00.000 | OUT   |  1 |   27 | 
|  2 | 2017-06-20 13:14:00.000 | IN   |  1 |   28 | 
+--------+-------------------------+--------------+----------+--------------+ 

答えて

2

これは集計クエリであるため、あなたは、sum(sum())をしたい:

SELECT itemid, activitydate, activitycode, 
     SUM(quantity) AS quantity, 
     SUM(SUM(CASE WHEN activitycode = 'IN' THEN quantity 
        WHEN activitycode = 'OUT' THEN -quantity 
        ELSE 0 
       END) 
      ) OVER (PARTITION BY itemid ORDER BY activitydate) AS runningcount 
FROM itemhistory 
GROUP BY itemid, activitydate, activitycode 
関連する問題