Как я могу объединить два класса значений в запросе SQL? - PullRequest
2 голосов
/ 10 сентября 2009

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

CREATE TABLE tbl (
    user_id: INTEGER,
    start: TIMESTAMP,
    end: TIMESTAMP,
    billable: BOOLEAN
);

Я хочу создать вид, который выглядит следующим образом:

user_id | billable_time | unbillable_time

Я могу получить один из этих двух, используя такой запрос:

SELECT user_id, sum(end - start) AS billable_time WHERE billable = TRUE GROUP BY user_id;

Однако мне нужны оба столбца с эквивалентным временем неоплаты:

SELECT user_id, sum(end - start) AS unbillable_time WHERE billable = FALSE GROUP BY user_id;

Как я могу получить эти два значения в одном запросе?

Ответы [ 2 ]

3 голосов
/ 10 сентября 2009
select user_id, sum(case billable when 1 then (end - start) end) as can_bill,
  sum(case billable when 0 then (end - start) end) as unbillable
0 голосов
/ 10 сентября 2009
SELECT user_id, billable, sum(end - start) AS billable_time 
GROUP BY user_id,billable;
...