Zdaję sobie sprawę, że ma to dwa lata, ale denerwuje mnie, że zaakceptowana odpowiedź wymaga użycia dynamicznego SQL, a odpowiedź, która uzyskała najwięcej głosów, nie zadziała:
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
musisz użyj opcji Grupuj według, w przeciwnym razie uzyskasz rozłożony wynik. Jeśli używasz Grupuj według, musisz owinąć każdą kolumnę, która nie znajduje się w klauzuli Grupuj według, funkcją agregującą (lub podzapytaniem).