SQL Server - вывод столбцов с разделителями в строки - PullRequest
0 голосов
/ 04 июня 2019

У меня есть два столбца данных с разделителями, которые я хотел бы развернуть в отдельные строки для каждого элемента данных. В приведенной ниже стартовой таблице данные с разделителями представлены в столбцах DataPointA и DataPointB . Также обратите внимание, что каждый идентификатор является уникальным идентификатором для каждого человека. Стартовая таблица выглядит так:

----------------------------------------------------------
|  ID   | FirstName | LastName | DataPointA | DataPointB |
----------------------------------------------------------
| A1234 | Bill      | Jones    | 1,3,7,8    | 1,4        |
| B5678 | Jane      | Smith    | 2,4,6,9    | 1,5        |
----------------------------------------------------------

Я хотел бы взять данные столбца DataPoint, разделенные запятыми, и создать одну строку для каждого значения DataPoint, а также сжать в одно поле. Таким образом, конечный результат будет выглядеть так:

-------------------------------------------------------------
|  ID   | FirstName | LastName | DataPoint  | DataPointType |
-------------------------------------------------------------
| A1234 | Bill      | Jones    | 1          | A             |
| A1234 | Bill      | Jones    | 3          | A             |
| A1234 | Bill      | Jones    | 7          | A             |
| A1234 | Bill      | Jones    | 8          | A             |
| A1234 | Bill      | Jones    | 1          | B             |
| A1234 | Bill      | Jones    | 4          | B             |
| B5678 | Jane      | Smith    | 2          | A             |
| B5678 | Jane      | Smith    | 4          | A             |
| B5678 | Jane      | Smith    | 6          | A             |
| B5678 | Jane      | Smith    | 9          | A             |
| B5678 | Jane      | Smith    | 1          | B             |
| B5678 | Jane      | Smith    | 5          | B             |
-------------------------------------------------------------

Моим первым инстинктом было использовать UNPIVOT, но я не могу заставить его работать на двух столбцах. Есть ли другой метод, который я должен использовать? Заранее спасибо.

1 Ответ

2 голосов
/ 04 июня 2019

Вам не нужно поворачиваться.Вам нужно разделить строку:

select t.ID, t.FirstName, t.LastName, v.*
from t cross apply
     (select 'A' as DataPointType, a.value as DataPoint
      from string_split(t.DataPointA, ',') a
      union all
      select 'B' as DataPointType, b.value as DataPoint
      from string_split(t.DataPointB, ',') b
     ) ab;

string_split() доступно только в самых последних версиях SQL Server.В старых версиях вы можете использовать собственную функцию разделения, которую можно легко найти в Интернете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...