2015-02-17 5 views
0

У меня есть таблица в SQL сервере, созданный с помощью этого кодаPivoting данных в SQL Server

CREATE TABLE t3 
(`NAME` varchar(20), `VALUE` varchar(17)); 

INSERT INTO t3 
(`NAME`, `VALUE`) 
VALUES 
('Name_Screened', 'johny bravo'), 
('Name_Screened', 'JOHNY CHAVO'), 
('Match_Type', 'Direct'), 
('Match_Type', 'Direct'), 
('Disposition', 'Successful'), 
('Disposition', 'Successful'), 
('Compliance_Approval', 'Yes'), 
('Compliance_Approval', 'Yes'), 
('Supporting_Documents', 'Lexix Nexis Match'), 
('Supporting_Documents', 'WORD NET MATCH'); 

Я пытаюсь повернуть эти данные с помощью кода

SELECT PVT.Match_Type, PVT.Name_Screened,PVT.Disposition,PVT.Compliance_Approval,PVT.Supporting_Documents 
FROM T3 
PIVOT (
max(VALUE) 
FOR NAME IN (Match_Type,Name_Screened,Disposition,Compliance_Approval,Supporting_Documents) 
) PVT 

, но я только получаю одну строку как этот

Match_Type - Name_Screened - Disposition - Compliance_Approval - Supporting_Documents 
Direct  - JOHNY CHAVO - Successful - Yes     - WORD NET MATCH 

я хочу две строки из 10 строк данных, но получить только один я думаю, что я не хватает на правильная функция агрегации только в точке поворота. Пожалуйста, помогите

ответ

2

Вам нужно немного изменить запрос:

SELECT PVT.Match_Type, PVT.Name_Screened, PVT.Disposition, 
     PVT.Compliance_Approval,PVT.Supporting_Documents 
FROM (
    SELECT NAME, VALUE, 
      ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY VALUE) AS rn 
    FROM T3) AS src 
PIVOT (
    MAX(VALUE) 
    FOR NAME IN (Match_Type, Name_Screened, Disposition, 
       Compliance_Approval,Supporting_Documents) 
) pvt 

Это создаст отдельную строку для каждого rn значения src.

+0

большое спасибо. В тот момент, когда я получаю 15 репутации, я проголосую за это. –

+0

Обновление, если вы не хотите потерять порядок своих данных и прекратить его смешивать с другими строками, добавьте поле идентификатора в исходную таблицу (в моем случае T3), затем используйте ORDER BY ID вместо ORDER BY VALUE в OVER , что вы говорите @giorgos –

+0

@AashishKumar Этот новый столбец «ID» может заменить место вычисленного поля 'rn'. В этом смысле вы правы: добавив «ID», вы можете явно определить порядок и, следовательно, не полагаться на «VALUE». –