I suggest using PIVOT function of T-SQL:
SELECT ItemId, ProductKey, Quantity, PaperType, Price
FROM (
SELECT ItemId, ProductKey, [Key], Value
FROM T
) AS yadayada
PIVOT (MAX(Value) FOR [Key] IN (Quantity, PaperType, Price)) AS pvt
Result of PIVOT query
(i believe this result is identical with @revoua's query with JOINs):
| ITEMID | PRODUCTKEY | QUANTITY | PAPERTYPE | PRICE |
|--------|------------|----------|-----------|-------|
| 1 | x | 50 | 1 | 25 |
| 2 | x | 100 | 1 | 40 |
| 3 | x | 250 | 1 | 80 |
| 4 | x | 500 | 1 | 120 |
| 5 | x | 1000 | 1 | 180 |
| 6 | x | 3000 | 1 | 300 |
| 7 | x | 50 | 2 | 30 |
| 8 | x | 100 | 2 | 50 |
| 9 | x | 250 | 2 | 100 |
| 10 | x | 500 | 2 | 150 |
| 11 | x | 1000 | 2 | 220 |
| 12 | x | 3000 | 2 | 350 |
| 13 | x | 50 | 3 | 35 |
| 14 | x | 100 | 3 | 60 |
| 15 | x | 250 | 3 | 120 |
| 16 | x | 500 | 3 | 180 |
| 17 | x | 1000 | 3 | 250 |
| 18 | x | 3000 | 3 | 400 |
you can query this with a where clause like this:
WHERE PaperType = @PaperType AND Quantity = @Quantity
OR using in a cte
;WITH a1 AS
(
SELECT ItemId, ProductKey, Quantity, PaperType, Price
FROM (
SELECT ItemId, ProductKey, [Key], Value
FROM T
) AS yadayada
PIVOT (MAX(Value) FOR [Key] IN (Quantity, PaperType, Price)) AS pvt
)
SELECT ItemId, Price, ProductKey
FROM a1
WHERE PaperType = @PaperType AND Quantity = @Quantity
SQLFIDDLE