2016-05-05 2 views
0

я следующие данные в SQL (NVARCHAR, NVARCHAR)SQL несколько строк с одинаковыми именами строк в столбце

Name: Test Person 
Phone Number: 290831283 
Fax Number: 192389182 
Email Address: [email protected] 
Name: Abacus Testing 
Phone Number: 901823908 
Fax Number: 9213989182 
Email Address: [email protected] 

Как отформатировать эти данные, чтобы быть:

[Name] [Phone Number] [Fax Number] [Email Address] 
Test Person 290831283 192389182 [email protected] 
Abacus Testing 901823908 9213989182 [email protected] 

Так в основном установки строки в соответствующий столбец

Я надеялся использовать сводную таблицу, но я получаю только первую строку из-за агрегации.

SELECT [Name], [Phone Number], [Fax Number], [Email Address] 
FROM 
(
    SELECT 
      ColumnName, 
      Data 
    FROM 
      TheData 
) SRC 
PIVOT 
(
    MAX(Data) 
    FOR ColumnName IN ([Name], [Phone Number], [Fax Number], [Email Address]) 
) PIV 

Я бы предпочел никаких методов КУРСОРА, никаких альтернатив?

  • Edit: добавлены другие поля доступны для использования

Остальные поля Доступные шильдике для каждой записи. i.e Name = 1, PhoneNumber = 2, FaxNumber = 3, EmailAddress = 4

Общий идентификатор для каждой из 4 записей также доступен. то есть первые 4 записи имеют идентификатор 1001, второй 4 записи имеют идентификатор 1002

+0

Проблема заключается в вашей модели данных. Кажется, что нет столбца, который группирует первые четыре строки как принадлежащие одному и тому же объекту, а второй - к другому объекту. Вы * не можете * полагаться на любой заказ, который им нужно вернуть в данный момент. –

+0

показать, как данные выглядят в вашей таблице. не текст. –

+1

Если у вас есть какое-то поле, которое сообщает порядок ваших данных, вы можете получить общее число для строк в каждой из групп на основе этого, а затем использовать это в своде. –

ответ

1

Следующее пояснение в комментариях вам просто нужно добавить CommonId в свой источник.

Это не агрегированный или расширяемый столбец, поэтому он будет использоваться в качестве столбца группировки, и вы получите строку на отдельное значение этого.

SELECT [Name], [Phone Number], [Fax Number], [Email Address] 
FROM 
(
    SELECT 
      CommonId, 
      ColumnName, 
      Data 
    FROM 
      TheData 
) SRC 
PIVOT 
(
    MAX(Data) 
    FOR ColumnName IN ([Name], [Phone Number], [Fax Number], [Email Address]) 
) PIV 
+0

Отлично, это было легко. Теперь я понимаю, что вы подразумеваете под четким строком. – fes

Смежные вопросы