Tôi đang cố gắng nhận được số lượng email nhận được trong một phạm vi ngày sử dụng MSSQL Express 2005. Tôi đã quản lý nhiều, nhưng bây giờ tôi muốn tách dữ liệu thành những gì đã được thực hiện với nó .SELECT COUNT trong phạm vi ngày
Đây là những gì tôi đã có cho đến nay:
SELECT EmailAddress, COUNT(EmailAddress)
FROM mails
WHERE ReceivedTime >= DATEADD(DAY, -7, GETDATE())
GROUP BY EmailAddress
HAVING COUNT(EmailAddress) > 10
Điều đó mang lại cho tôi một danh sách địa chỉ người gửi hơn 10 lần trong tuần trước, nhưng chúng tôi có một cột cho chúng ta biết những gì đã xảy ra với thư. Tôi đang cố gắng để đạt được một cái gì đó như thế này:
SELECT EmailAddress,
COUNT(ActionTaken WHERE ActionTaken="Deleted") AS Deleted,
COUNT(ActionTaken WHERE ActionTaken="Replied") AS Replied,
COUNT(ActionTaken WHERE ActionTaken="Read") AS Read,
COUNT(EmailAddress) AS Total
FROM mails
WHERE ReceivedTime >= DATEADD(DAY, -7, GETDATE())
GROUP BY EmailAddress
HAVING COUNT(EmailAddress) > 10
Tôi đang tìm kiếm một kết quả thiết lập dọc theo những dòng:
EmailAddress | Deleted | Replied | Read | Total
---------------------------------------------------
[email protected] | 4 | 5 | 3 | 12
[email protected] | 2 | 6 | 3 | 11
Tôi khá chắc chắn rằng nó có cái gì để làm với việc sử dụng OVER (PARTITION BY) mệnh đề, nhưng tôi đã đánh một bức tường. Tôi nhận ra trường ActionTaken không lý tưởng, nhưng tôi đã không xây dựng nó!
Bạn chỉ cứu tôi điều gì sẽ gần như chắc chắn đã được cả một ngày cố gắng để có được đầu của tôi xung quanh chức năng tổng hợp vì lợi ích của cái gì đó trông đơn giản như vậy bây giờ tôi nhìn thấy nó! Cảm ơn bạn, hoạt động hoàn hảo! – timbstoke
@timbstoke - Rất vui được trợ giúp. Bạn cũng có thể sử dụng 'PIVOT' nhưng tôi thích phương thức' CASE' dễ nhớ hơn và linh hoạt hơn. Ngoài ra với 'PIVOT', thêm các cột bổ sung vào bảng cơ sở có thể phá vỡ truy vấn trừ khi bạn cẩn thận sử dụng một bảng có nguồn gốc hoặc CTE chỉ với các cột có liên quan làm nguồn. –