| Author |
Topic |
|
ramyasre
Starting Member
16 Posts |
Posted - 2010-09-22 : 02:44:34
|
| hi,I am used PIVOT and Left Join in the following tables. But i am not get the actual output. kindly help me.Table: LocationLocationID LocationName_______________________ 1000 Hyderabad 1002 Delhi 1004 BombayTable: ParameterParameterID ParameterName _________________________ 100 Total No. of Emp 101 Total No. of HousesTable: Training_ParameterParameterID ParameterValue LocationID_____________________________________ 100 6222.56 1000 100 7899.09 1002 101 898.00 1002These are 3 tablesI need the ouput like as followsParameterName Hyderabad Delhi Bombay_________________________________________Total No. of Emp 6222.56 7899.09 nullTotal No. of Houses null 898.0 nullRegardsTahnks |
|
|
rohitvishwakarma
Posting Yak Master
232 Posts |
Posted - 2010-09-22 : 03:08:04
|
| can you please provide us with your query? |
 |
|
|
vaibhavktiwari83
Aged Yak Warrior
843 Posts |
Posted - 2010-09-22 : 04:36:16
|
| Name of citie are fixed ?Vaibhav TTo walk FAST walk ALONE To walk FAR walk TOGETHER |
 |
|
|
ramyasre
Starting Member
16 Posts |
Posted - 2010-09-22 : 04:39:20
|
quote: Originally posted by vaibhavktiwari83 Name of citie are fixed ?Vaibhav TTo walk FAST walk ALONE To walk FAR walk TOGETHER
Cites are not fixed |
 |
|
|
vaibhavktiwari83
Aged Yak Warrior
843 Posts |
Posted - 2010-09-22 : 04:40:56
|
If the name of cities and number of cities are fixed then try this - SELECT ParameterName, [Hyderabad], [Delhi], [Bombay]FROM (SELECT ParameterName, ParameterValue, LocationName FROM Training_parameter T FULL OUTER JOIN Parameter P ON T.ParameterID = P.ParameterID FULL OUTER JOIN Location L ON T.LocationID = L.LocationIDWHERE ParameterName IS NOT NULL) AS SrcPIVOT ( MAX( ParameterValue ) FOR LocationName IN ([Hyderabad], [Delhi], [Bombay])) AS Pvt Vaibhav TTo walk FAST walk ALONE To walk FAR walk TOGETHER |
 |
|
|
ramyasre
Starting Member
16 Posts |
Posted - 2010-09-22 : 04:41:14
|
quote: Originally posted by rohitvishwakarma can you please provide us with your query?
I need the output like as followsParameterName Hyderabad Delhi Bombay_________________________________________Total No. of Emp 6222.56 7899.09 nullTotal No. of Houses null 898.0 nullThanks |
 |
|
|
rohitvishwakarma
Posting Yak Master
232 Posts |
Posted - 2010-09-22 : 06:51:25
|
Here is the final query handling any number of Locations*Basically Improvisation on vaibhavktiwari83's query CREATE TABLE #temp_columns(id INT IDENTITY(1,1),columnNames VARCHAR(100)) INSERT INTO #temp_columnsSELECT DISTINCT LocationName FROM LocationDECLARE @count INTDECLARE @max_count INTSET @count = 1SET @max_count = (SELECT MAX(id) FROM #temp_columns)DECLARE @sql_columns_list VARCHAR(1000)SET @sql_columns_list = ' 'WHILE(@count <= @max_count) BEGIN DECLARE @column_name VARCHAR(100) SELECT @column_name = columnNames FROM #temp_columns WHERE id= @count IF(@count = @max_count) SET @sql_columns_list = @sql_columns_list +'['+ @column_name + ']' ELSE SET @sql_columns_list = @sql_columns_list +'['+ @column_name + ']'+ ' , ' SET @count = @count + 1ENDDECLARE @sql VARCHAR(MAX)SET @sql = 'SELECT ParameterName, '+@sql_columns_list+' FROM ( SELECT ParameterName, ParameterValue, LocationName FROM Training_parameter T FULL OUTER JOIN Parameter P ON T.ParameterID = P.ParameterID FULL OUTER JOIN Location L ON T.LocationID = L.LocationID WHERE ParameterName IS NOT NULL ) AS Src PIVOT ( MAX( ParameterValue ) FOR LocationName IN ('+@sql_columns_list+')) AS Pvt'--PRINT @sqlEXEC(@sql) |
 |
|
|
vaibhavktiwari83
Aged Yak Warrior
843 Posts |
Posted - 2010-09-23 : 02:55:47
|
@rohitvishwakarma : You can make it more simple without using temp table and loop.Have a look - --SELECT DISTINCT LocationName FROM LocationDECLARE @sql_columns_list VARCHAR(1000)SET @sql_columns_list = ' ' SELECT @sql_columns_list = @sql_columns_list + '[' + LocationName + '],' FROM ( SELECT DISTINCT LocationName FROM Location ) A SELECT @sql_columns_list = LEFT(@sql_columns_list, LEN(@sql_columns_list)-1)DECLARE @sql VARCHAR(MAX)SET @sql = 'SELECT ParameterName, '+@sql_columns_list+' FROM ( SELECT ParameterName, ParameterValue, LocationName FROM Training_parameter T FULL OUTER JOIN Parameter P ON T.ParameterID = P.ParameterID FULL OUTER JOIN Location L ON T.LocationID = L.LocationID WHERE ParameterName IS NOT NULL ) AS Src PIVOT ( MAX( ParameterValue ) FOR LocationName IN ('+@sql_columns_list+')) AS Pvt'--PRINT @sqlEXEC(@sql)Vaibhav TTo walk FAST walk ALONE To walk FAR walk TOGETHER |
 |
|
|
rohitvishwakarma
Posting Yak Master
232 Posts |
Posted - 2010-09-23 : 03:07:03
|
quote: Originally posted by vaibhavktiwari83 @rohitvishwakarma : You can make it more simple without using temp table and loop.Have a look - DECLARE @sql_columns_list VARCHAR(1000)SET @sql_columns_list = ' ' SELECT @sql_columns_list = @sql_columns_list + '[' + LocationName + '],' FROM ( SELECT DISTINCT LocationName FROM Location ) A SELECT @sql_columns_list = LEFT(@sql_columns_list, LEN(@sql_columns_list)-1) Vaibhav TTo walk FAST walk ALONE To walk FAR walk TOGETHER
Masterpiece I was looking for something like that for weeks to avoid the loop and temp table, which were making my life difficult.ThanksRohit |
 |
|
|
vaibhavktiwari83
Aged Yak Warrior
843 Posts |
Posted - 2010-09-23 : 03:12:11
|
| Thats my pleasure that I could be able to help you...Vaibhav TTo walk FAST walk ALONE To walk FAR walk TOGETHER |
 |
|
|
|