Oui, vous pouvez le faire assez facilement dans SQL Server 2005 et plus - le mot magique est PIVOT
.
est ici la requête dont vous avez besoin:
SELECT
TaskID,
[001], [002], [003]
FROM
YourTable
PIVOT
(
SUM(HOURS)
FOR VarID IN ([001], [002], [003])
)
AS YourPivot
ORDER BY
YourPivot.TaskID
L'idée d'un tableau croisé dynamique est un peu difficile à assimilez tout d'abord - peut-être ces sources d'information aideront:
L'explication de MSDN pourrait faire la lumière:
Vous pouvez utiliser le PIVOT et UNPIVOT opérateurs relationnels pour changer une expression d'une valeur de table dans une autre table . PIVOT fait tourner une expression valeur table en faisant tourner les valeurs uniques à partir d'une colonne dans l'expression en plusieurs colonnes dans la sortie, et effectue des agrégations où ils sont nécessaires sur toute les valeurs des colonnes restantes qui sont souhaitée en finale sortie. UNPIVOT effectue l'opération opposée à PIVOT en faisant tourner des colonnes d'une expression de table dans la colonne .
Vous prenez donc essentiellement une VarID
variable et tourner ses valeurs distinctes (001, 002, 003) et un agrégat par rapport à ceux (SUM (heures)) dans les colonnes d'une nouvelle table "pivot".
Marc