【问题标题】:SQL combine two columns if data is the same in result如果结果中的数据相同,则 SQL 合并两列
【发布时间】: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


【解决方案1】:

查询的最后一部分应该是这样的......

SELECT
Logonuser,
sum(MondayL1 + MondayL2) AS total
FROM CTE_Totals
GROUP BY Logonuser
ORDER BY Logonuser ASC

这应该按登录用户名分组并将总价值相加。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 2017-12-21
    • 2012-11-14
    • 2020-05-09
    • 2022-10-08
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多