Click here to Skip to main content
15,890,512 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi..
I have results in columns like this :

State Name Category NoOfRooms NoOfHotels
ANDHRA PRADESH 5 Star Delux 1832 8
ANDHRA PRADESH 5 Star 1902 13
ANDHRA PRADESH 4 Star 1116 9
ANDHRA PRADESH 3 Star 5038 78

I want result in format




State Name 5 Star Delux 5 Star 4 Star 3 Star
ANDHRA PRADESH
NoOfRooms 1832 1902 1116 5038
NoOfHotels 8 13 9 78



Pls help...
Posted

Hi,
I have created a sample for you,
Hope this will help you.


SQL
-- Create Table

CREATE TABLE [dbo].[Hotels](
	[State_Name] [varchar](30) NOT NULL,
	[Categorys] [varchar](30) NOT NULL,
	[NoOfRooms] Int NOT NULL,
	[NoOfHotels]  Int NOT NULL,
) ON [PRIMARY]
-- Insert Sample Data 
INSERT INTO [Hotels]
           ([State_Name] ,[Categorys],[NoOfRooms],[NoOfHotels])
     VALUES
           ('ANDHRA PRADESH', '5 Star Delux',  1832, 8 )
           
INSERT INTO [Hotels]
           ([State_Name] ,[Categorys],[NoOfRooms],[NoOfHotels])
     VALUES
           ('ANDHRA PRADESH',  '5 Star'  ,1902, 13  )
INSERT INTO [Hotels]
           ([State_Name] ,[Categorys],[NoOfRooms],[NoOfHotels])
     VALUES
           ('ANDHRA PRADESH',  '4 Star',  1116,  9   )
INSERT INTO [Hotels]
           ([State_Name] ,[Categorys],[NoOfRooms],[NoOfHotels])
     VALUES
           ('ANDHRA PRADESH',  '3 Star',  5038,  78 )


-- Using Pivot query to display your result .

DECLARE @MyColumns1 AS NVARCHAR(MAX),
    @SQLquery1  AS NVARCHAR(MAX)
-- here first we get all the ItemName which should be display in Columns we use this in our necxt pivot query
select @MyColumns1 = STUFF((SELECT ',' + QUOTENAME(Categorys) 
                    FROM Hotels
                    GROUP BY Categorys
                    ORDER BY Categorys
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')
-- here we use the above all Item name to disoplay its price as column and row display
set @SQLquery1 = N'SELECT State_Name, ''No of Rooms'' as Type,' + @MyColumns1 + N' from 
             (
                 SELECT 
       State_Name, 
        NoOfRooms as TotRoom
     
        ,Categorys
    FROM Hotels
            ) x
            pivot 
            (
                 SUM(TotRoom)
                for Categorys in (' + @MyColumns1 + N')
            ) p 
            UNION  
            SELECT State_Name, ''No of Hotels''  as Type,' + @MyColumns1 + N' from 
             (
                 SELECT 
       State_Name, 
        NoOfHotels as TotRoom
     
        ,Categorys
    FROM Hotels
            ) x
            pivot 
            (
                 SUM(TotRoom)
                for Categorys in (' + @MyColumns1 + N')
            ) p 
            '
exec sp_executesql @SQLquery1;
 
Share this answer
 
Comments
Member 9773317 3-Nov-14 2:27am    
Great help..thanks
syed shanu 3-Nov-14 2:49am    
Thank You
Garth J Lancaster 3-Nov-14 2:47am    
Nice work mate
syed shanu 3-Nov-14 2:49am    
Thank You
I'm wondering if you can 'PIVOT' the information

http://technet.microsoft.com/en-us/library/ms177410(v=sql.105).aspx[^]
 
Share this answer
 
Comments
Maciej Los 3-Nov-14 2:04am    
Pivot won't help in this case ;( because columns and rows has been mixed in a strange way.

ANDHRA PRADESH
NoOfRooms

Do you see?
Member 9773317 3-Nov-14 2:10am    
yes only pivot will not help.. may be i need to use pivot and unpivot togather in some way
Garth J Lancaster 3-Nov-14 2:10am    
I think so - Ive never actually used SQL to that extent - it seemed easier than the hard way - thanks Maciej

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900