Я пытаюсь добавить 3 колонки в таблицу SQl.
Column1: Total_Hours_Overall
Я хочу, чтобы этот столбец суммировал общее количество часов на последовательность_ID
Столбец 2: Всего_No_Codes
Я хочу, чтобы этот столбец был подсчетом отдельных значений в столбце «Клиент».
Столбец 3: Всего клиентов
Я хочу, чтобы этот столбец был подсчетом отдельных значений в столбце «Клиент», где столбец «Job_Type» равен «Клиент»,
Ниже приведен фрагмент таблицы, которую я сейчас имею. Есть более 8 Sequence_ID | Date_European | Часы | Месяц | День | Год | Day_of_Week | Client_Number | Клиент | Job_No | Job_Type 1001 | 01 / 09 / 2017 | 7.3 | 9 | 1 | 2017 | Пятница | 0 | ЕЖЕГОДНЫЙ ОСТАВЬТЕ | 0 | ЕЖЕГОДНЫЙ ОТПУСК 1001 | 04 / 09 / 2017 | 7.3 | 9 | 4 | 2017 | Понедельник | 0 | ЕЖЕГОДНЫЙ ОСТАВЬТЕ | 0 | ЕЖЕГОДНЫЙ ОТПУСК 1001 | 09 / 08 / 2017 | 2 | 8 | 9 | 2017 | Среда | 1 | Админ | A1 | Non-Billable 1001 | 24 / 08 / 2017 | 1.3 | 8 | 24 | 2017 | Четверг | 2 | Клиент1 | A2 | Клиент 1001 | 28 / 08 / 2017 | 2.3 | 8 | 28 | 2017 | Понедельник | 2 | Клиент1 | A2 | Клиент 1001 | 16 / 08 / 2017 | 0,5 | 8 | 16 | 2017 | Среда | 3 | Клиент2 | A3 | Клиент 1001 | 16 / 08 / 2017 | 1 | 8 | 16 | 2017 | Среда | 2 | Клиент1 | A2 | Клиент 1001 | 18 / 08 / 2017 | 3 | 8 | 18 | 2017 | Пятница | 3 | Клиент2 | A3 | Клиент 1001 | 22 / 08 / 2017 | 0,7 | 8 | 22 | 2017 | Вторник | 4 | Клиент3 | A4 | Клиент 1001 | 16 / 08 / 2017 | 7.3 | 8 | 16 | 2017 | Среда | 5 | Клиент4 | A5 | Клиент 1001 | 18 / 08 / 2017 | 1.3 | 8 | 18 | 2017 | Пятница | 5 | Клиент4 | A5 | Клиент 1001 | 21 / 08 / 2017 | 1 | 8 | 21 | 2017 | Понедельник | 5 | Клиент4 | A5 | Клиент 1001 | 12 / 09 / 2017 | 0,6 | 9 | 12 | 2017 | Вторник | 5 | Клиент4 | A5 | Клиент 1002 | 01 / 09 / 2017 | 7.3 | 9 | 1 | 2017 | Пятница | 0 | ЕЖЕГОДНЫЙ ОСТАВЬТЕ | 0 | ЕЖЕГОДНЫЙ ОТПУСК 1002 | 04 / 09 / 2017 | 7.3 | 9 | 4 | 2017 | Понедельник | 0 | ЕЖЕГОДНЫЙ ОСТАВЬТЕ | 0 | ЕЖЕГОДНЫЙ ОТПУСК 1002 | 09 / 08 / 2017 | 2 | 8 | 9 | 2017 | Среда | 1 | Админ | A1 | Non-Billable 1002 | 24 / 08 / 2017 | 1.3 | 8 | 24 | 2017 | Четверг | 4 | Клиент3 | A4 | Клиент 1002 | 28 / 08 / 2017 | 2.3 | 8 | 28 | 2017 | Понедельник | 5 | Клиент4 | A5 | Клиент 0 уникальный sequence_ID, который имеет несколько строк на ID. Я хочу, чтобы приведенные выше столбцы отображали значения для каждой строки.
Sequence_ID |Date_European |Hours |Month |Day |Year |Day_of_Week |Client_Number |Client |Job_No |Job_Type |Total_Hours_Overall |Total_No_Codes |Total Clients
1001 |01/09/2017 |7.3 |9 |1 |2017 |Friday |0 |ANNUAL LEAVE |0 |ANNUAL LEAVE |35.6 |6 |4
1001 |04/09/2017 |7.3 |9 |4 |2017 |Monday |0 |ANNUAL LEAVE |0 |ANNUAL LEAVE |35.6 |6 |4
1001 |09/08/2017 |2 |8 |9 |2017 |Wednesday |1 |Admin |A1 |Non-Billable |35.6 |6 |4
1001 |24/08/2017 |1.3 |8 |24 |2017 |Thursday |2 |Client1 |A2 |Client |35.6 |6 |4
1001 |28/08/2017 |2.3 |8 |28 |2017 |Monday |2 |Client1 |A2 |Client |35.6 |6 |4
1001 |16/08/2017 |0.5 |8 |16 |2017 |Wednesday |3 |Client2 |A3 |Client |35.6 |6 |4
1001 |16/08/2017 |1 |8 |16 |2017 |Wednesday |2 |Client1 |A2 |Client |35.6 |6 |4
1001 |18/08/2017 |3 |8 |18 |2017 |Friday |3 |Client2 |A3 |Client |35.6 |6 |4
1001 |22/08/2017 |0.7 |8 |22 |2017 |Tuesday |4 |Client3 |A4 |Client |35.6 |6 |4
1001 |16/08/2017 |7.3 |8 |16 |2017 |Wednesday |5 |Client4 |A5 |Client |35.6 |6 |4
1001 |18/08/2017 |1.3 |8 |18 |2017 |Friday |5 |Client4 |A5 |Client |35.6 |6 |4
1001 |21/08/2017 |1 |8 |21 |2017 |Monday |5 |Client4 |A5 |Client |35.6 |6 |4
1001 |12/09/2017 |0.6 |9 |12 |2017 |Tuesday |5 |Client4 |A5 |Client |35.6 |6 |4
1002 |01/09/2017 |7.3 |9 |1 |2017 |Friday |0 |ANNUAL LEAVE |0 |ANNUAL LEAVE |20.2 |2 |2
1002 |04/09/2017 |7.3 |9 |4 |2017 |Monday |0 |ANNUAL LEAVE |0 |ANNUAL LEAVE |20.2 |2 |2
1002 |09/08/2017 |2 |8 |9 |2017 |Wednesday |1 |Admin |A1 |Non-Billable |20.2 |2 |2
1002 |24/08/2017 |1.3 |8 |24 |2017 |Thursday |4 |Client3 |A4 |Client |20.2 |2 |2
1002 |28/08/2017 |2.3 |8 |28 |2017 |Monday |5 |Client4 |A5 |Client |20.2 |2 |2
Ниже приведен пример того, как я хочу, чтобы мой стол выглядел.
select t.*, sum(hours) over (partition by sequence_id) as sum_hours,
max(codes_seqnum) over (partition by sequence_id) as num_codes,
max(clients_seqnum) over (partition by sequence_id) as num_clients
from (select t.*,
dense_rank() over (partition by sequence_id order by client) as codes_seqnum,
dense_rank() over (partition by sequence_id, job_type order by (case when job_type = 'Client' then client end)) as client_seqnum
from t
) t;
Я попытался (и не смог) сделать это по-разному. Я думаю, что использование подзапросов требуется, но я не могу получить правильный формат.
Еще одна проблема, с которой я нахожусь трудно, чтобы получить требуемый формат, является функцией подсчета, поскольку я знаю, что для этого требуется предложение group by, но я хочу сохранить все строки в моей таблице.
Я думаю, что я переосмыслил все это, поэтому любая помощь будет оценена по достоинству. заранее спасибо