Jag inser att det här är två år gammalt, men det stör mig att det accepterade svaret kräver att du använder dynamisk SQL och det svar som röstas mest upp inte fungerar:
Select P.ProductId, P.Name
, Min( Case When PM.MetaKey = 'A' Then PM.MetaValue End ) As A
, Min( Case When PM.MetaKey = 'B' Then PM.MetaValue End ) As B
, Min( Case When PM.MetaKey = 'C' Then PM.MetaValue End ) As C
From Products As P
Join ProductMeta As PM
On PM.ProductId = P.ProductId
Group By P.ProductId, P.Name
Du måste använd en Group By eller så får du ett förskjutet resultat. Om du använder en Group By måste du linda varje kolumn som inte finns i Group By-satsen i en aggregerad funktion (eller en underfråga).