J'ai validationErrors avec divers WIPReason associés et je veux compter en fonction de WIPReason différent, j'utilise Union All et cela fonctionne mais Query est très grande avec plusieurs raisons de wip plus à 10. S'il vous plaît trouver la requête ci-dessousCompte pour la valeur multiple dans la table sans union tout en sql
SELECT
COUNT(tlv.TransactionLineId) AS TotalErrors,
COUNT(tl.Id) AS TotalLines,
COUNT(tlv.Reason) AS NoWorkRecords,
0 AS ValidationErrors
FROM
dbo.TimesheetCellTransactionLine tctl
INNER JOIN
dbo.TransactionLine tl ON tctl.TransactionLineId = tl.Id
INNER JOIN
dbo.TransactionLineValidation tlv ON tl.Id = tlv.TransactionLineId
INNER JOIN
dbo.WIPReason w ON tlv.Reason = w.Id
WHERE
tl.CurrentStatus = 1
AND w.Id = 4 -- NoWorkRecords
GROUP BY
tlv.TransactionLineId, tl.Id
UNION ALL
SELECT
COUNT(tlv.TransactionLineId) AS TotalErrors,
COUNT(tl.Id) AS TotalLines,
0 AS NoWorkRecords,
COUNT(tlv.Reason) AS ValidationErrors
FROM
dbo.TimesheetCellTransactionLine tctl
INNER JOIN
dbo.TransactionLine tl ON tctl.TransactionLineId = tl.Id
INNER JOIN
dbo.TransactionLineValidation tlv ON tl.Id = tlv.TransactionLineId
INNER JOIN
dbo.WIPReason w ON tlv.Reason = w.Id
WHERE
tl.CurrentStatus = 1
AND w.Id = 1 -- validationErrors
GROUP BY
tlv.TransactionLineId, tl.Id
est-il une autre façon élégante de le faire pour w.Id = 1 à 10
ET w.Id = 1 - validationErrors
Mise à jour: Je veux des résultats en tant que colonnes 10 colonnes de compte que j'utilise ceci dans un autre grand choix.
partition essayer par w.id –
Ajouter 'w.Id' à la liste' select', 'et w.Id> = 1 et w.Id <= 10 'à la clause' where' à la place de 'AND w.Id = 4' si vous avez besoin de limiter la plage, et' w.Id' à l'endroit approprié dans le 'group by'. Vous pouvez également ajouter une clause 'order by'. – HABO