Группировка данных одного типа в SQL Server - PullRequest
0 голосов
/ 28 сентября 2018

Я должен сгруппировать определенные типы данных в одну строку в представлении.Я не знаю, как подходить для такого типа результатов в SQL Server.

Данные таблицы:

| Process   | StartDate | EndDate      |
+-----------+-----------+--------------+ 
| A1        | 05-06-2018|     NULL     | 
| A2        |    NULL   | 08-03-2018   | --Here A1 & A2 are same process
| B1        | 03-02-2018|     NULL     |
| C1        | 07-06-2018|     NULL     | 
| C2        |    NULL   | 09-03-2018   | --Here C1 & C2 are same process

Желаемый вывод:

| Process   | StartDate | EndDate      |
+-----------+-----------+--------------+
| A         | 05-06-2018|  08-03-2018  | 
| B         | 03-02-2018|     NULL     | 
| C         | 07-06-2018|   09-03-2018 |

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Похоже, вы сохранили данные в плохом порядке, у них должен быть отдельный столбец один для serial # и другой для process, но вы можете сделать:

select left(process, 1), max(startdate) as sartdate, max(enddate) as enddate
from data d
group by left(process, 1);

На основе комментариев вы также можетеделать:

select dd.Process, max(startdate) as sartdate, max(enddate) as enddate
from data d cross apply
     ( values (case when Process in ('A1','A2') then 'A'
                    when Process = 'B1' then 'B'
                    when Process in ('C1','C2') then 'C' 
               end) 
     ) dd(Process)
group by dd.Process;
0 голосов
/ 28 сентября 2018

вариант использования, когда

select case when Process  in ('A1','A2') then 'A' 
            when Process  in ('C1','C2') then 'C' 
             else Process  as p,max(StartDate),max(EndDate)
 from t
group by case when Process  in ('A1','A2') then 'A' 
            when Process  in ('C1','C2') then 'C' 
             else Process
0 голосов
/ 28 сентября 2018

Вы можете использовать агрегацию:

select left(process, 1) as process, max(startdate) as startdate), max(enddate) as enddate
from data
group by left(process, 1);
...