【发布时间】:2017-03-07 08:45:00
【问题描述】:
我有以下 SQL:
;
WITH CTE_Totals AS (
SELECT DISTINCT
CASE WHEN LoginName = Letter1SentBy
THEN LoginName
WHEN LoginName = Letter2SentBy
THEN LoginName END AS Logonuser,
sum(CASE WHEN Letter1SentDate = DATEADD(WEEK, DATEDIFF(DAY, 0, getdate()) / 7, 0)
THEN 1
ELSE 0 END) AS MondayL1,
SUM(CASE WHEN Letter2SentDate = DATEADD(WEEK, DATEDIFF(DAY, 0, getdate()) / 7, 0)
THEN 1
ELSE 0 END) AS MondayL2
FROM MainCase
WITH ( NOLOCK ) LEFT OUTER JOIN
Left OUTER JOIN
letters_sent WITH (NOLOCK) ON MainCase.casekey = letters_sent.casekey
users WITH (NOLOCK) ON Maincase.userCaseNo = users.userCaseNo
GROUP BY LoginName, Letter1SentBy, Letter2SentBy
)
SELECT DISTINCT
Logonuser,
sum(MondayL1 + MondayL2) AS total
FROM CTE_Totals
GROUP BY Logonuser, CTE_Totals.MondaytL1, CTE_Totals.MondayL2
ORDER BY Logonuser ASC
我想要实现的是:- 最初我有 2 个 sql 查询,第一个求和用户在特定日期发送的所有 letter1,第二个求和用户在特定日期发送的所有 letter2。我想将两个查询合并为 1。所以我有用户名和发送的字母 1 和 2 的总数。
Maincase 表包含诸如 登录名
letters_sent 表包含字段 Letter1SentBy、Letter1Senton(日期/时间字段)、Letter2SentBy、letter2senton(日期/时间字段)
案例上的用户可能与发送信件 1 和发送信件 2 的用户不同,我想找出每个用户发送的信件 1 和 2 的总数。
我的问题是发送信件的用户存储在不同的字段中。我试图在上面的查询中结合这个,但我得到以下结果:-
- 比利 1
- 比利 6
- 鲍勃 5
- 鲍勃 2
如果发信 1 的人 = 发信 2 的人,我希望结果显示为
- 比利 7
- 鲍勃 7
【问题讨论】:
-
编辑您的问题并提供示例数据和所需结果。
-
抱歉不太明白 - 我以为我已经给出了数据和想要的结果?
-
。 .您展示了一个复杂的查询和一些结果。我们不知道基础数据是什么样的。
标签: sql sql-server-2008 common-table-expression