[英]SQL Select case to create new value
大家好,很抱歉,但我不知道该怎么称呼。
我有一张表,其中包含以下信息:从创建该行到最后更新该行花费了多长时间,这些信息显示在以下列中:
CREATED
LAST_UPD
两者之间的时间差显示在称为:
SOLVED_SEC
(时间以秒为单位)
现在,我想从该表中收集一些数据,但是如果CREATED(日期)不在我们公司的开放时间之内,则应该在我的营业时间中重新计算SOLVED_SEC
我们的开放时间在名为KS_DRIFT.SYS_DATE_KS的表中。
该表具有名为THIS_DATE_OPENING的列。
我当时想我可以这样计算新的求解时间:
THIS_DATE_OPENING-LAST_UPD
但是我不太确定如何做到这一点
以下是我现在拥有的SQL:
SELECT
TIDSPUNKT, LAST_UPD, AA.CREATED,
TRUNC(AA.SOLVED_SEC/60/60,2) as LØST_TIME,
//this is my attempt
CASE
WHEN AA.CREATED >= CC.THIS_DATE_CLOSING
THEN LØST_TIME = (LAST_UPD-CC.THIS_DATE_OPENING) AS LØST_TIME
END,
COUNT(CASE WHEN AA.LAST_UPD >= CC.THIS_DATE_CLOSING THEN 1 END) as AFTER_CLOSING,
COUNT(CASE WHEN STATUS ='Færdig' THEN 1 END)as Completed_Callbacks
FROM
KS_DRIFT.NYK_SIEBEL_CALLBACK_AGENT_H_V AA
INNER JOIN
KS_DRIFT.V_TEAM_DATO BB ON AA.TIDSPUNKT = BB.DATO
RIGHT JOIN
KS_DRIFT.SYS_DATE_KS CC ON AA.TIDSPUNKT = CC.THIS_DATE
WHERE
AA.TIDSPUNKT BETWEEN '2012-04-01' AND '2013-04-04'
AND AA.AFSLUTTET_AF = BB.INITIALER
GROUP BY
AA.TIDSPUNKT, LØST_SEKUNDER, LAST_UPD, AA.CREATED
不幸的是,这不起作用。
我的问题是,如果CREATED> THIS_DATE_CLOSED,如何更改SOLVED_SEC的值?
如果您需要其他信息,请随时发表评论。
更新
我尝试了以下方法:
CASE WHEN (AA.CREATED >= CC.THIS_DATE_CLOSING) THEN (AA.LAST_UPD-CC.THIS_DATE_OPENING) END AS SOVLED_AFTER_OPENING
但是我明白了
"not a GROUP BY expression"
更新2
我的SQL语句现在看起来像这样:
SELECT TIDSPUNKT,
AA.CREATED,
LAST_UPD,
AA.AGENTGRUPPE,
TRUNC(AA.LØST_SEKUNDER/60/60,2) as LØST_TIME,
'LØST_TIME' = CASE WHEN AA.CREATED >= CC.THIS_DATE_CLOSING THEN DATEDIFF(ss, CC.THIS_DATE_OPENING, LAST_UPD) END,
COUNT(CASE WHEN AA.AGENTGRUPPE not in('Hovednumre','Privatcentre','Forsikring','Hotline','Stabe','Kunder','Erhverv','NykreditKunder','Servicecentret') THEN 1 END) as CALLBACKS_OUTSIDE_OF_KS,
COUNT(CASE WHEN AA.CREATED >= CC.THIS_DATE_CLOSING THEN 1 END) as AFTER_CLOSING,
COUNT(CASE WHEN STATUS ='Færdig' THEN 1 END)as Completed_Callbacks
FROM KS_DRIFT.NYK_SIEBEL_CALLBACK_AGENT_H_V AA
INNER JOIN KS_DRIFT.V_TEAM_DATO BB ON AA.TIDSPUNKT = BB.DATO
RIGHT JOIN KS_DRIFT.SYS_DATE_KS CC ON AA.TIDSPUNKT = CC.THIS_DATE
WHERE AA.TIDSPUNKT BETWEEN '2013-04-01' AND '2013-04-04'
AND AA.AFSLUTTET_AF = BB.INITIALER
GROUP BY AA.TIDSPUNKT, LAST_UPD, AA.CREATED, AA.LØST_SEKUNDER,
AA.AFSLUTTET_AF, AA.AGENTGRUPPE
但是我从预期的位置找不到关键字
尝试计算时间差时,需要使用DATEDIFF函数。
例如:
SELECT DATEDIFF(ss, THIS_DATE_OPENING, LAST_UPD);
其中“ ss”表示秒。 第一个参数是您要计算的日期部分。 像秒或分钟或几天之类的。
您可以在这里找到文档http://msdn.microsoft.com/zh-cn/library/aa258269(v=sql.80).aspx
如果我不正确理解您的问题,请告诉我。
我也刚刚注意到您正在尝试这样做:
CASE WHEN AA.CREATED >= CC.THIS_DATE_CLOSING THEN LØST_TIME =(LAST_UPD-CC.THIS_DATE_OPENING) AS LØST_TIME END
尝试以下方法:
'L0ST_TIME' = CASE WHEN AA.CREATED >= CC.THIS_DATE_CLOSING THEN DATEDIFF(ss, CC.THIS_DATE_OPENING, LAST_UPD) END
高温超导
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.