Динамическое расположение SQL столбцов - PullRequest
0 голосов
/ 15 октября 2019

Мои данные -

CREATE TABLE Tbl1 (State varchar(max), Value int)
INSERT INTO Tbl1 VALUES 
('A',10),
('B',20),
('C1',30),
('C3',40),
('D',50),
('C2',70),
('E',60);

Сценарий / проблема - я хочу, чтобы любое состояние, начинающееся с C, было сложено в конце. Если добавлено новое состояние, например C2, тогда запрос должен быть в состоянии обнаружить и вставить C2 в виде столбца между C1 и C3. Если добавлено состояние E, то его следует добавить в виде столбца после D.

Требуемый вывод -

+----+----+----+----+----+----+----+
| A  | B  | D  | E  | C1 | C2 | C3 |
+----+----+----+----+----+----+----+
| 10 | 20 | 50 | 60 | 30 | 70 | 40 |
+----+----+----+----+----+----+----+

1 Ответ

1 голос
/ 15 октября 2019

Пример

Declare @SQL varchar(max) = '
Select *
From Tbl1 A
Pivot (sum(Value) 
  For [State] in (' + Stuff((Select ',' + QuoteName([State]) 
                               From ( Select top 10000 [State] 
                                       From  Tbl1 
                                       Group By [State] 
                                       Order By Len([State]),[State]
                                     ) A For XML Path('')),1,1,'')  + ') 
                  ) p
'

--Print @SQL
Exec(@SQL);

Возвращает

A   B   D   E   C1  C2  C3
10  20  50  60  30  70  40
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...