Microsoft SQL Server Management Studio - необходимо транспонировать значение - PullRequest
0 голосов
/ 26 сентября 2018

Нужно посоветовать, как получить вывод из приведенной ниже таблицы:

+-----+-------+------------------+
| ID  | Weeks | Hoursofoperation |
+-----+-------+------------------+
| 112 | W     | 7-7              |
| 112 | T     | 8-6              |
| 112 | Th    | 8-6              |
| 112 | Sa    | 9-1              |
| 112 | M     | 9-6              |
| 112 | F     | 9-6              |
+-----+-------+------------------+

enter image description here

Необходимо получить значение вывода как MF 9-6, TTh 8-6, W 7-7, Sa 9-1

enter image description here

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Начиная с SQL Server 2017, вы можете использовать STRING_AGG для агрегирования строк в предложении SELECT оператора GROUP BY:

declare @tmp table ([ID] int, Weeks varchar(50), Hoursofoperation varchar(50))
insert into @tmp values
     (112, 'W'  ,'7-7')
    ,(112, 'T'  ,'8-6')
    ,(112, 'Th' ,'8-6')
    ,(112, 'Sa' ,'9-1')
    ,(112, 'M'  ,'9-6')
    ,(112, 'F'  ,'9-6')

 select [ID], string_agg(res,',') as RESULT from (
     select [ID], string_agg(weeks,'') + ' ' + Hoursofoperation as res
        from @tmp 
        group by [ID], Hoursofoperation
 ) t
 group by [ID]

Результат:

enter image description here

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

Рассмотрим следующее:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(weeks CHAR(2) NOT NULL PRIMARY KEY
,hour VARCHAR(12) NOT NULL
);

INSERT INTO my_table VALUES
('W','7-7'),
('T','8-6'),
('Th','8-6'),
('Sa','9-1'),
('M','9-6'),
('F','9-6');

SELECT hour
     , GROUP_CONCAT(weeks ORDER BY CASE weeks WHEN 'M' THEN 1 
                                              WHEN 'T' THEN 2 
                                              WHEN 'W' THEN 3 
                                              WHEN 'Th' THEN 4 
                                              WHEN 'F' THEN 5 
                                              ELSE 6 END) x
  FROM my_table 
 GROUP 
    BY hour;
+------+------+
| hour | x    |
+------+------+
| 7-7  | W    |
| 8-6  | T,Th |
| 9-1  | Sa   |
| 9-6  | M,F  |
+------+------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...