Mahesh Pattnayak Ответов: 1

Как получить значения столбцов в строке с помощью оператора PIVOT в SQL SERVER ?


текущие данные :

Ticket            Txn_Name                       Txn_Date
6700196058        ORDER CREATED                  20-Jan-2017 01:33:30 PM    
6700196058        IN-TRANSIT TO CUSTOMER         20-Jan-2017 03:49:00 PM
6700196058        ON HOLD                        23-Jan-2017 04:04:09 PM
6700196058        ORDER CLOSED                   25-Jan-2017 03:06:46 PM


Эти вышеприведенные данные хранятся в таблице.

Как мы можем получить этот результат?

предположим, что билет имеет 2 txn_name
Ticket         Status1            status2
6700196058     ORDER CREATED      ON HOLD


предположим, что билет имеет 3 txn_name
Ticket         Status1            status2            Status3
6700196058     ORDER CREATED      ON HOLD            ORDER CLOSED


Пожалуйста помочь..

Что я уже пробовал:

Как получить значения столбцов в строке с помощью оператора PIVOT в SQL SERVER ?

1 Ответов

Рейтинг:
2

debasish mishra

CREATE TABLE MaheshTable(ticket varchar(30),
 txn_name varchar(30),
  txn_date datetime);
insert into MaheshTable(ticket,txn_name,txn_date)VALUES ('6700196058','ORDER CREATED',GETDATE());    
insert into MaheshTable(ticket,txn_name,txn_date)VALUES('6700196058','IN-TRANSIT TO CUSTOMER',GETDATE());
insert into MaheshTable(ticket,txn_name,txn_date)VALUES('6700196058','ON HOLD',GETDATE());
insert into MaheshTable(ticket,txn_name,txn_date)VALUES('6700196058','ORDER CLOSED',GETDATE());

insert into MaheshTable(ticket,txn_name,txn_date)VALUES('6700196059','ORDER CLOSED',GETDATE());

--select * from MaheshTable;

Выше я попробовал сначала создать схему с записями.Ниже приведен фактический запрос.
Create table temp
(
 ticket varchar(100),
 txn_nme varchar(30),
  txn_date datetime,
statuspi varchar(20)
);
Insert into temp
SELECT * ,ROW_NUMBER() OVER(Partition by ticket ORDER BY ticket) AS Row_Number from MaheshTable;

--select * from temp;

DECLARE @cols AS NVARCHAR(MAX);
 DECLARE   @query  AS NVARCHAR(MAX);

SET @cols = STUFF((SELECT distinct ',' +'Status'+ QUOTENAME(c.statuspi) 
            FROM temp c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,0,0,'');
--execute(@cols);        
set @query = 'Select ticket,'+@cols+'from(select ticket,statuspi from temp)x pivot(VAR(txn_nme) for txn_name in ('+@cols+'))p';
--Print @query;
execute(@query);