我在SQL Server數據庫中創建報告。我將首先顯示它的代碼,然後描述它的作用和問題。SQL Server:從count()中刪除重複項
SELECT
COUNT(e.flowid) AS [count],
t.name AS [process],
CAST(DATEPART(YEAR, e.dtcr) AS VARCHAR) + '-' + CAST(RIGHT('0' + RTRIM(DATEPART(MONTH, e.dtcr)), 2) AS VARCHAR) + '-' + CAST(RIGHT('0' + RTRIM(DATEPART(DAY, e.dtcr)), 2) AS VARCHAR) AS [day]
FROM
dbo.[Event] e
JOIN
dbo.Flow f ON e.flowid = f.id
JOIN
dbo.WorkOrder o ON f.workorderno = o.number
AND o.treenodeid IN (26067, 26152, 2469, 1815, 1913) -- only from requested processes
JOIN
dbo.TreeNode t ON o.treenodeid = t.id -- for process name in select statement
JOIN
dbo.Product p ON f.productid = p.id
AND p.materialid NOT IN (26094, 27262, 27515, 27264, 28192, 28195, 26090, 26092, 26093, 27065, 26969, 27471, 28351, 28353, 28356, 28976, 27486, 29345, 29346, 27069, 28653, 28654, 26735, 26745, 28686) -- exclude unwanted family codes
WHERE
e.pass = 1 -- only passed units
AND e.treenodeid IN (9036, 9037, 9038, 9039, 12594, 26330) -- only from requested events
AND e.dtcr BETWEEN '2015-12-01 00:00:00.000' AND '2016-05-31 23:59:59.999' -- only from requested time interval
GROUP BY
DATEPART(YEAR, e.dtcr), DATEPART(MONTH, e.dtcr), DATEPART(DAY, e.dtcr), t.name
ORDER BY
[day]
查詢所做的是計數在某個時間段內通過特定事件(使用某些過濾器)的單位。
重要的表是:
- 事件 - 基本日誌傳遞特定事件的單位。
- 產品 - 單位列表。
輸出是這樣的:
COUNT PROCESS DAY
71 Process-1 2015-12-01
1067 Process-2 2015-12-01
8 Process-3 2015-12-01
3 Process-4 2015-12-01
15 Process-1 2015-12-02
276 Process-2 2015-12-02
47 Process-3 2015-12-02
54 Process-4 2015-12-02
它確實很好,但有一個問題。在某些特定情況下,單元可以多次傳遞相同的事件,並且此查詢計算每次這樣的傳遞。我只需要統計每個單位一次。
「重複」記錄位於事件表中。他們有不同的日期和ID。我只需要計數一次的所有記錄都是一樣的。有沒有簡單的方法來實現這一點?
謝謝你的時間和答案!
你的意思'計數(不同的流ID)'? – jarlh
你是認真的嗎,真的那麼簡單嗎? (是的,我嘗試過,現在我覺得自己像個白癡。)請將它添加爲答案,以便我可以將其標記爲正確的。 – Andrew