我有與各種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