【发布时间】:2019-08-19 16:37:04
【问题描述】:
我想将结果分组到单独的列中,如 Idle Total、Lock Total 等。我不是程序员,当然也不是数据库管理员,所以我可能没有所有工具和访问权限,但我会很感激任何帮助。
我尝试过使用其他方法,这里和其他网站,但总是归结为 SUM 或 GROUP BY 函数,我对此知之甚少。
SELECT TOP 10000
AGENT.AGENT_NAME,
ID.AGENT_ID,
TIME.DURATION_SECONDS,
SUM(CASE
WHEN ID.AGENT_ID IN ('IDLE','LOCK','LOGIN')
THEN 'WORKSTATE'
ELSE NULL
END)
FROM
WORKSTATE TIME
LEFT JOIN
DATABASE ID ON ID.INDEX = TIME.AGENT_INDEX
LEFT JOIN
DATABASE ORG ON TIME.AGENT_LOGIN_ID = ORG.AGENT_NAME
WHERE
(TIME.START_TIME = 2019-08-19) AND ORG.TEAM IN 'COMPANY'
GROUP BY
AGENT_AGENT_NAME,
ID.AGENT_ID,
TIME.DURATION_SECONDS
我希望将结果对代理在给定日期空闲、锁定或登录的总时间进行分组。
Date Name Idle hrs Lock hrs Login
--- --- ------ ------ -----
08/19 John 2.3 1.7 4
【问题讨论】:
-
您需要在 select 语句中添加四列才能在输出中获得四列。不知道您要为哪个列创建总和。你有一个字符串文字,它会爆炸,因为对字符串求和不起作用。
-
符合预期结果的样本数据将对我们有很大帮助。
-
这看起来像是一个使用 SQL Server 的 PIVOT 操作的机会。 docs.microsoft.com/en-us/sql/t-sql/queries/…
-
这里有多个问题。首先,值 2019-08-19 是一个数学表达式 - 所以这不起作用。接下来,您不能对字符串求和 - 这是您的 case 表达式返回的内容。使用没有 order by 子句的 TOP 将返回一组未定义的行。您有一个名称包含“秒”的列,但您想要的输出意味着小时。显然有一些数学可以在单位之间进行转换。因此,从一个为特定人员和日期选择行的基本查询开始。然后逐步建立。
标签: sql-server sum case-when