基本結果を返すまで機能しているクエリがありますが、さまざまなグループに基づいて他の列/変数を選択する方法を見つけようとして問題が発生しています。
クエリのベースは次のとおりです。
SELECT
EmpID,
managerID,
Group,
quant as sales,
from products p
where active_date > CURRENT_DATE - 50 days;
問題は、これらのレコードは50日間ですが、過去25日間の条件に基づく列として3つの新しい計算を選択したいと思います。
私が現在戻ってきたとしましょう:
empId | managerID | group | sales
=======================================
123 1 A 4
321 1 B 2
516 1 C 8
345 2 D 4
839 2 E 7
849 2 F 2
192 3 G 9
221 4 H 3
したがって、group by empID
(sum of sales
、group by empID
)、group by managerID
、およびtotalに基づいて売上の合計を作成したいと思います(ただし、ここでは過去25日間のレコードのみに基づいてグループ化したいと思います)。
私の予想される出力のアイデア(過去50日間のすべてのレコードも過去25日間であったと仮定):
empId | managerID | group | sales | salesEmpID | salesMngID | SalesTotal
====================================================================================
123 1 A 4 4 14 39
321 1 A 2 2 14 39
516 1 A 8 8 14 39
345 2 A 4 4 13 39
839 2 A 7 7 13 39
849 2 A 2 2 13 39
192 3 A 9 9 9 39
221 4 A 3 3 3 39
したがって、製品グループAの場合、これにより、各従業員の売上だけでなく、その営業マネージャーの売上、さらには製品グループAの総売上も得られます。
クエリが過去50日間であっても、そのようなものを取得し、数量の合計が過去25日間に基づいていることを確認するにはどうすればよいですか?
RDBMSがウィンドウ関数をサポートしていない場合に機能するソリューションを次に示します。
これは、一連の結合を作成して、各グループ(従業員、マネージャー、合計)の小計を計算することによって機能します。このdbフィドルを参照してください(DB2フィドルについては知らないので、MySQL5.7を使用しましたが、これはDB2で機能するはずです):
SELECT
t.empID,
t.managerID,
t.groupID,
t.sales,
temp.sales salesEmpID,
tmng.sales salesMngID,
tall.sales salesTotal
FROM
mytable t
INNER JOIN (
SELECT empID, SUM(sales) sales
FROM mytable
WHERE active_date > CURRENT_DATE - INTERVAL 25 DAY
GROUP BY empID
) temp ON temp.empID = t.empID
INNER JOIN (
SELECT managerID, SUM(sales) sales
FROM mytable
WHERE active_date > CURRENT_DATE - INTERVAL 25 DAY
GROUP BY managerID
) tmng ON tmng.managerID = t.managerID
CROSS JOIN (
SELECT SUM(sales) sales
FROM mytable
WHERE active_date > CURRENT_DATE - INTERVAL 25 DAY
) tall
WHERE t.active_date > CURRENT_DATE - INTERVAL 50 DAY;
| empID | managerID | groupID | 販売| salesEmpID | salesMngID | salesTotal | | ----- | --------- | ------- | ----- | ---------- | ---------- | ---------- | | 123 | 1 | A | 4 | 4 | 14 | 39 | | 321 | 1 | B | 2 | 2 | 14 | 39 | | 516 | 1 | C | 8 | 8 | 14 | 39 | | 345 | 2 | D | 4 | 4 | 13 | 39 | | 839 | 2 | E | 7 | 7 | 13 | 39 | | 849 | 2 | F | 2 | 2 | 13 | 39 | | 192 | 3 | G | 9 | 9 | 9 | 39 | | 221 | 4 | H | 3 | 3 | 3 | 39 |
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加