SQL选择案例以创建新值

时间:2013-04-04 13:28:54

标签: sql select

大家好,我很抱歉,但我不知道该怎么称呼这个问题。

我有一个包含信息的表,其中包括从创建行到最后一次更新所需的时间,这些信息显示在以下列中:

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>我如何更改SOLVED_SEC的值? THIS_DATE_CLOSED?

如果您需要其他信息,请随时发表评论。

更新

我尝试了以下内容:

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

但是我在预期的

中找不到关键字

1 个答案:

答案 0 :(得分:3)

在尝试计算时间差异时,您需要使用DATEDIFF函数。

例如:

SELECT DATEDIFF(ss, THIS_DATE_OPENING, LAST_UPD);

其中“ss”表示秒。第一个参数是您要计算的datepart。像秒或分钟或天或其他什么。

您可以在http://msdn.microsoft.com/en-us/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

HTH