Поля строки преобразования TSQL -> столбец - PullRequest
0 голосов
/ 28 июля 2011

допустим, у меня есть следующие данные:

ID         Key        String        Number

1          Name       A             -1
1          Age        ''            30  
1          Sex        Male          -1
2          Name       B             -1 
2          Age        ''            20
2          Sex        Female        -1  

Интересно, сможем ли мы использовать Pivot для получения следующих данных

ID          Name        Age           Sex
1           A           30            Male
2           B           20            Female

Любая помощь будет оценена!

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Может быть проще это сделать?

SELECT id
,MAX(CASE WHEN Key = 'Name' THEN string END) as name
,MAX(CASE WHEN Key = 'Age' THEN number END) as age
,MAX(CASE WHEN Key = 'sex' THEN string END) as sex
FROM table
GROUP BY id
1 голос
/ 28 июля 2011
DECLARE @dat TABLE  (
id int,
name varchar(50),
string varchar(50),
number int
)

DECLARE @dat2 TABLE  (
id int,
name_col varchar(50),
val varchar(50)
)

INSERT INTO @dat (id, name, string, number) VALUES (1,'Name', 'A', -1)
INSERT INTO @dat (id, name, string, number) VALUES (1,'Age', '', 30)
INSERT INTO @dat (id, name, string, number) VALUES (1,'Sex', 'Male', -1)
INSERT INTO @dat (id, name, string, number) VALUES (2,'Name', 'A', -1)
INSERT INTO @dat (id, name, string, number) VALUES (2,'Age', '', 20)
INSERT INTO @dat (id, name, string, number) VALUES (2,'Sex', 'Female', -1)

INSERT INTO @dat2
SELECT [id], [name], [val] = CASE  WHEN number = -1 THEN string ELSE
CONVERT(varchar,number) END FROM @dat

SELECT * FROM @dat2
PIVOT
(
  MAX(val)
  FOR [name_col] IN ([Name],[Age],[Sex])
)
AS p

Вы получите то, что ожидали:

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