Test it:
CREATE TABLE #tbl (ProductName VARCHAR(30), Price MONEY, Specification VARCHAR(30), [Value] VARCHAR(10))
INSERT INTO #tbl (ProductName, Price, Specification, [Value])
VALUES('keyboard', 560, 'circuit', 'yes')
INSERT INTO #tbl (ProductName, Price, Specification, [Value])
VALUES('keyboard', 560, 'techs', 'no')
INSERT INTO #tbl (ProductName, Price, Specification, [Value])
VALUES('keyboard', 560, 'multi', 'good')
DECLARE @cols VARCHAR(300)
DECLARE @dt VARCHAR(2000)
DECLARE @pt VARCHAR(4000)
SET @cols = STUFF((SELECT DISTINCT '],[' + Specification
FROM #tbl
ORDER BY '],[' + Specification
FOR XML PATH('')),1,2,'') + ']'
SET @dt = 'SELECT ProductName, Price, Specification, ValID = CASE WHEN [Value]=''no'' THEN 0 WHEN [Value]=''yes'' THEN 1 ELSE 2 END ' +
'FROM #tbl'
SET @pt = 'SELECT ProductName, Price, ' + @cols + ' ' +
'FROM (' + @dt + ') AS DT ' +
'PIVOT(MAX(ValID) FOR Specification IN(' + @cols + ')) AS PT'
EXEC(@pt)
DROP TABLE #tbl
In above example is use simple trick. I "convert" values from [Value] column into numeric values:
no
->
0
;
yes
->
1
, other->
2
. Why? To use agregate function and to create pivot table.
Result:
ProductName Price cicuit multi techs
keyboard 560,00 1 2 0