MSSQL Express 2005を使用して日付範囲内で受信した電子メールの数を取得しようとしています。これを数多く管理しましたが、今ではデータをそれに加えたものに分割したい。ここで 日付範囲内のSELECT COUNT
は、私がこれまで持っているものです:私の最後の週に10回以上を郵送アドレスのリストを与えるSELECT EmailAddress, COUNT(EmailAddress)
FROM mails
WHERE ReceivedTime >= DATEADD(DAY, -7, GETDATE())
GROUP BY EmailAddress
HAVING COUNT(EmailAddress) > 10
を、私たちはで何が起こったのかを教えてくれる別の列を持っています郵便物。私はこのような何かを達成しようとしている:
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
私はこれらの線に沿って、結果セットを探しています:私はそれが(OVER使用とは何かを持っているかなり確信している
EmailAddress | Deleted | Replied | Read | Total
---------------------------------------------------
[email protected] | 4 | 5 | 3 | 12
[email protected] | 2 | 6 | 3 | 11
PARTITION BY)節がありますが、私は壁に当たっています。私はActionTakenフィールドが理想的ではないことを認識しますが、私はそれを構築しませんでした!
あなたはほぼ確実に、今私はそれを参照してくださいので、シンプルに見える何かのために集約関数のまわりで私の頭を取得しようとして一日であったであろうものを私を救いました!ありがとう、それは完全に動作します! – timbstoke
@timbstoke - 喜んで助けてください。 'PIVOT'を使うこともできますが、私は' CASE'メソッドを覚えやすく、より柔軟にする方が好きです。また、関連する列のみをソースとして使用して派生テーブルまたはCTEを使用する場合を除き、「PIVOT」を使用すると、基本表に列を追加すると問合せが破損する可能性があります。 –