SELECT rn, APPROVED, [Not Approved] as REJECT, NULL
FROM (
SELECT MgtApproval, SchedID, ROW_NUMBER() OVER (PARTITION BY mgtapproval ORDER BY SchedID) AS rn
FROM LeaveRequest
) l
PIVOT
(
MIN(SchedId)
FOR MgtApproval IN
([APPROVED], [Not Approved], [NULL])
) as pvt
A PIVOT
a toujours besoin d'une fonction d'agrégation, mais celle-ci est garantie pour s'agréger sur au plus une colonne.
est ici la requête sur des données d'échantillon qui retourne exactement ce que vous voulez:
WITH leaveRequest aS
(
SELECT 'APPROVED' AS mgtapproval, 1 AS SchedID
UNION ALL
SELECT 'Reject' AS mgtapproval, 2 AS SchedID
UNION ALL
SELECT 'NULL' AS mgtapproval, 3 AS SchedID
UNION ALL
SELECT 'APPROVED' AS mgtapproval, 4 AS SchedID
UNION ALL
SELECT 'Reject' AS mgtapproval, 5 AS SchedID
UNION ALL
SELECT 'NULL' AS mgtapproval, 6 AS SchedID
)
SELECT APPROVED, REJECT, [NULL]
FROM (
SELECT MgtApproval, SchedID, ROW_NUMBER() OVER (PARTITION BY mgtapproval ORDER BY SchedID) AS rn
FROM LeaveRequest
) l
PIVOT
(
MIN(SchedId)
FOR MgtApproval IN
([APPROVED], [Reject], [Null])
) as pvt
Mise à jour:
Puisque vous avez mentionné que votre colonne est en fait un bit
, vous devez utiliser cette syntaxe:
SELECT [1] AS approved, [0] AS reject, [-1] AS nil
FROM (
SELECT COALESCE(MgtApproval, -1) AS MgtApproval, SchedID, ROW_NUMBER() OVER (PARTITION BY mgtapproval ORDER BY SchedID) AS rn
FROM LeaveRequest
) l
PIVOT
(
MIN(SchedId)
FOR MgtApproval IN
([1], [0], [-1])
) as pvt
Salut merci pour votre temps. J'ai essayé votre code et m'indique une erreur: Msg 8114, niveau 16, état 1, ligne 1 Erreur lors de la conversion du type de données nvarchar en int. Msg 473, niveau 16, état 1, ligne 1 La valeur incorrecte "APPROVED" est fournie dans l'opérateur PIVOT. – Yves
@Yonita: votre 'MgtApproval' semble être un entier, alors que vous le comparez à une valeur' VARCHAR' ('APPROVED'). J'ai mis à jour le post avec les exemples de données que vous avez fournis et cela fonctionne. Pourriez-vous s'il vous plaît poster votre définition de table exacte? – Quassnoi
J'ai une table de consultation qui représente la valeur: MgtApproval bit Approuvé - vrai ou 1 Rejeter - false 0r 0 Null - valeur par défaut – Yves