i have small issues i have been trying to figure out in SQL. I have a table with Item Numbers, Attribute Names and Attribute values. Each Item Number might have same or differen
I have just done this for my own data and I found the following worked for me:
Change the following line :
PIVOT
(([ATTRIBUTE_VALUE])
FOR [ATTR_DISPLAY_NAME] IN ( Select* [ATTR_DISPLAY_NAME] FROM tbl_ICC))
To:
PIVOT
(max(attribute_values) FOR [ATTR_DISPLAY_NAME] IN ( Select* [ATTR_DISPLAY_NAME] FROM tbl_ICC))
Note I removed the Attribute_Value in the Pivot.
*note: you need to check your variable names to ensure what I have written is what you need.
You should probably be using two tables, the first one using the item number as the primary key with color, speed, mass, etc as it's columns. The second table could then have a one to many relationship with the first table on the item number and have the attribute names and attribute values as its columns. This will not only allow you to print out the data you need (by using a join), but it will make database maintenance easier over time as things change.
You have some syntax errors in your original query
SELECT *
FROM
(SELECT [ITEM_NUMBER],
[ATTR_DISPLAY_NAME],
[ATTRIBUTE_VALUE]
FROM tbl_ICC ) AS SourceTable
PIVOT (max([ATTRIBUTE_VALUE])
FOR [ATTR_DISPLAY_NAME] IN ([color],[size] )) -- << Add More Attr Display Name Here
AS PivotTable;
EDIT - Dynamic Version
Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName([ATTR_DISPLAY_NAME]) From tbl_ICC Order by 1 For XML Path('')),1,1,'')
Select @SQL = '
Select *
From (
Select [ITEM_NUMBER],
[ATTR_DISPLAY_NAME],
[ATTRIBUTE_VALUE]
From tbl_ICC
) A
Pivot (max(ATTRIBUTE_VALUE) For [ATTR_DISPLAY_NAME] in (' + @SQL + ') ) p'
Exec(@SQL);