我有与各种WIPReason相关联的验证错误,我想根据不同的WIPReason计数,我使用Union All,它的工作原理但查询很大,小于10请看以下在表中没有union的所有数据的多个值的计数在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
查询是否有这样做的w.Id = 1〜10
和w.Id = 1的任何其他优雅的方式 - validationErrors
更新: 我希望结果作为列10计数列,因为我在另一个大选中使用此列。
试分区 –
添加'w.Id'到'select'列表,'和w.Id> = 1和w.Id <= 10如果你需要限制范围,可以用'where子句'来代替'AND w.Id = 4','w.Id'则可以用在'group by'的适当位置。您可能还想添加一个'order by'子句。 – HABO