Запрос KDB: получить пустые значения столбца из другой таблицы, если значение равно нулю - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть 2 таблицы в результате запроса, как показано ниже:

select customer,date,product,orderId,version,size from tableA where date=2020.04.08,product in (`Derivative)



+----------+----------+------------+---------+---------+------+
| customer |   date   |  product   | orderId | version | size |
+----------+----------+------------+---------+---------+------+
| XYZ fund | 4/8/2020 | Derivative |       1 |       6 |      |
| XYZ fund | 4/8/2020 | Derivative |       2 |       6 | 1000 |
| XYZ fund | 4/8/2020 | Derivative |       3 |       4 |      |
+----------+----------+------------+---------+---------+------+


select sum size by date,product,parent_orderId,parent_version from tableB where date=2020.04.08,product in (`Derivative)


+----------+------------+----------------+----------------+------+
|   date   |  product   | parent_orderId | parent_version | size |
+----------+------------+----------------+----------------+------+
| 4/8/2020 | Derivative |              1 |              1 |   10 |
| 4/8/2020 | Derivative |              1 |              2 |   10 |
| 4/8/2020 | Derivative |              1 |              3 |   10 |
| 4/8/2020 | Derivative |              1 |              4 |   10 |
| 4/8/2020 | Derivative |              1 |              5 |   10 |
| 4/8/2020 | Derivative |              1 |              6 |   10 |
| 4/8/2020 | Derivative |              3 |              1 |   20 |
| 4/8/2020 | Derivative |              3 |              2 |   20 |
| 4/8/2020 | Derivative |              3 |              3 |   20 |
| 4/8/2020 | Derivative |              3 |              4 |   20 |
+----------+------------+----------------+----------------+------+

Так что в основном я хочу, чтобы, если Результат 1 имел недостающий размер, он заполнялся из Результата 2 на основе соответствующих столбцов, т.е. даты = дата, продукт = продукт, OrderId = parent_orderId, версия = parent_version. Есть ли способ сделать это с помощью запроса в KBD? Ожидается следующее o / p:

+----------+----------+------------+---------+---------+------+
| customer |   date   |  product   | orderId | version | size |
+----------+----------+------------+---------+---------+------+
| XYZ fund | 4/8/2020 | Derivative |       1 |       6 |   10 |
| XYZ fund | 4/8/2020 | Derivative |       2 |       6 | 1000 |
| XYZ fund | 4/8/2020 | Derivative |       3 |       4 |   20 |
+----------+----------+------------+---------+---------+------+

1 Ответ

1 голос
/ 09 апреля 2020

Вы можете использовать оператор left join для достижения этой цели:

q)res1:select customer,date,product,orderId,version,size from tableA where date=2020.04.08,product in (`Derivative);
q)res2:select sum size by date,product,orderId:parent_orderId,version:parent_version from tableB where date=2020.04.08,product in (`Derivative);
q)res1 lj res2
customer date     product    orderId version size
-------------------------------------------------
XYZ fund 4/8/2020 Derivative 1       6       10  
XYZ fund 4/8/2020 Derivative 2       6       1000
XYZ fund 4/8/2020 Derivative 3       4       20  

Обратите внимание, что мы должны были убедиться, что имена столбцов во вторых таблицах совпадают с теми, к которым мы хотели присоединиться в первой таблице.

...