繁体   English   中英

SQL Select案例以创建新值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM