Reputation: 2571
I am trying to convert rows to column
This is my table records
Records
SrID ProID Year Qty Months
-------------------------------------
4444 112112 2019 22 THREE
4444 112112 2019 44 FOUR
4444 112112 2019 20 FIVE
2244 112112 2019 17 SIX
5555 112112 2019 16 SEVEN
4444 222111 2019 5 ONE
4444 222111 2019 4 FOUR
4444 222111 2019 55 FIVE
2244 222111 2019 20 SIX
Expected Result
SrID ProID One Two Three Four Five Six Seven
----------------------------------------------------------------
4444 112112 null null 22 44 20 null null
2244 112112 null null null null null 17 null
5555 112112 null null null null null null 16
4444 222111 5 null null 4 55 null null
2244 222111 null null null null null 20 null
I tried like below
SELECT
SrID,ProID,ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN
FROM
Records rec
PIVOT
(
MAX(rec.Qty)
FOR Months IN (ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN)
)AS P
But I got the result in a wrong way, like
SrID ProID One Two Three Four Five Six Seven
----------------------------------------------------------------
4444 112112 null null 22 null null null null
4444 112112 null null null 44 null null null
4444 112112 null null null null 20 null null
can give me solution with how it works.
Upvotes: 0
Views: 47
Reputation: 36
Everything looks good to me:
CREATE TABLE [dbo].[myTable](
SrID[numeric](10),
ProID[numeric](10),
Year[numeric](10),
Qty[numeric](10),
Months[varchar](20) NULL)
INSERT INTO [myTable] VALUES
(4444, 112112, 2019 , 22 ,'THREE'),
(4444, 112112, 2019 , 44 ,'FOUR'),
(4444, 112112, 2019 , 20 ,'FIVE'),
(2244, 112112, 2019 , 17 ,'SIX'),
(5555, 112112, 2019 , 16 ,'SEVEN'),
(4444, 222111, 2019 , 5 ,'ONE'),
(4444, 222111, 2019 , 4 ,'FOUR'),
(4444, 222111, 2019 , 55 ,'FIVE'),
(2244, 222111, 2019 , 20 ,'SIX')
--select * from [myTable]
SELECT
SrID,ProID,ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN
FROM [dbo].[myTable] rec
PIVOT
(
MAX(rec.Qty)
FOR Months IN (ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN)
)AS P
order by 2,1
/*
Result:
SrID ProID ONE TWO THREE FOUR FIVE SIX SEVEN
2244 112112 NULL NULL NULL NULL NULL 17 NULL
4444 112112 NULL NULL 22 44 20 NULL NULL
5555 112112 NULL NULL NULL NULL NULL NULL 16
2244 222111 NULL NULL NULL NULL NULL 20 NULL
4444 222111 5 NULL NULL 4 55 NULL NULL
*/
Can you see any diference with your table/data/query?
Upvotes: 1