#sql #oracle
Вопрос:
Предположим, у меня есть такая структура таблицы:
CREATE TABLE TEST
(
X VARCHAR2(1), -- firstName
Y VARCHAR2(1), -- lastName
Z NUMBER(3), -- quantity
W VARCHAR2(1) -- B=Buy or S=Sell
);
INSERT INTO TEST(x, y, z, w) VALUES ('a', 'b', 3, 'S');
INSERT INTO TEST(x, y, z, w) VALUES ('a', 'b', 5, 'B'); -- sum of 3 S 5 B = 2 B
INSERT INTO TEST(x, y, z, w) VALUES ('c', 'd', 10, 'S');
INSERT INTO TEST(x, y, z, w) VALUES ('c', 'd', 2, 'B'); -- sum of 10 S 2 B = 8 S
Я хочу суммировать количество для одного и того же имени и фамилии и получить результат, как показано ниже
X Y sum W
------------------
a b 2 B
c d 8 S
Можно ли получить этот результат в одном SQL-запросе ?
легко получить SUM
с GROUP BY
помощью, но не нашел способа сохранить столбец «Покупка» и «Продажа» одновременно.
Комментарии:
1. Пожалуйста, объясните логику для столбца
W
.2. в столбце
W
указано, что это либо заказ на покупку, либо заказ на продажу для данного количества;
Ответ №1:
О, я понимаю. Я думаю, вам нужна агрегация с некоторой дополнительной условной логикой:
select x, y,
abs(sum(case when w = 'B' then z else - z end)) as sum,
(case when sum(case when w = 'B' then z else - z end) >= 0
then 'B' else 'S'
end)
from test
group by x, y;
Комментарии:
1. Да, это ответ на вопрос. Спасибо!