sirve que para multiples multiple funcion fechas ejemplo con columns columnas agregado sql sql-server tsql

que - Pivot usando SQL Server 2000



pivot sql server ejemplo (5)

Arreglé un escenario de muestra de mi problema y espero que sea suficiente para que alguien me señale la dirección correcta.

Tengo dos mesas

Productos

Producto Meta

Necesito un conjunto de resultados de los siguientes



Select a.ProductId ,a.Name ,(Select c.MetaValue From [Product Meta] c Where c.ProductId = a.ProductId And c.MetaKey = ''A'') As ''A'' ,(Select d.MetaValue From [Product Meta] d Where d.ProductId = a.ProductId And d.MetaKey = ''B'') As ''B'' ,(Select e.MetaValue From [Product Meta] e Where e.ProductId = a.ProductId And e.MetaKey = ''C'') As ''C'' From Products a Order By a.ProductId Asc


Si su motor de base de datos es 2005 y su base de datos está en modo de compatibilidad 2000, puede trabajar en el modo de compatibilidad inferior ejecutando su consulta desde una base de datos de 2005. Apunte a la base de datos 2000 utilizando la convención de nomenclatura de 3 partes para sus tablas en la consulta, como DatabaseNameHere.dbo.TableNameHere


Hemos utilizado con éxito el siguiente enfoque en el pasado ...

SELECT [p].ProductID, [p].Name, MAX(CASE [m].MetaKey WHEN ''A'' THEN [m].MetaValue END) AS A, MAX(CASE [m].MetaKey WHEN ''B'' THEN [m].MetaValue END) AS B, MAX(CASE [m].MetaKey WHEN ''C'' THEN [m].MetaValue END) AS C FROM Products [p] INNER JOIN ProductMeta [m] ON [p].ProductId = [m].ProductId GROUP BY [p].ProductID, [p].Name

También puede ser útil transponer agregaciones con el uso de ...

SUM(CASE x WHEN ''y'' THEN yVal ELSE 0 END) AS SUMYVal

EDITAR

También vale la pena señalar que esto es el uso de SQL estándar ANSI y por lo tanto funcionará en todas las plataformas :)


Me doy cuenta de que esto tiene dos años, pero me molesta que la respuesta aceptada requiera el uso de SQL dinámico y la respuesta más votada no funcionará:

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

Debe usar un Agrupar por o obtendrá un resultado escalonado. Si está utilizando un Agrupar por, debe ajustar cada columna que no está en la cláusula Agrupar por en una función agregada (o una subconsulta).