Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql (续) 从Asgnmnt 式中(CallID=C.CallID)) 和上限(A.GroupName)=@GroupName 并在(@Assignee)中降低(A.EMail) 和上限(C.CallStatus)=@RecordType 和(@RecordType='CLOSED'和 C.在@StartDate和@EndDate)之间的结束日期)或 (@RecordType='REQUEST TO CLOSE'和 A.在@StartDate和@EndDate)之间的日期解析)或 (@RecordType“已关闭”和 @记录类型“请求关闭”) );_Sql_Sql Server_Database - Fatal编程技术网

Sql (续) 从Asgnmnt 式中(CallID=C.CallID)) 和上限(A.GroupName)=@GroupName 并在(@Assignee)中降低(A.EMail) 和上限(C.CallStatus)=@RecordType 和(@RecordType='CLOSED'和 C.在@StartDate和@EndDate)之间的结束日期)或 (@RecordType='REQUEST TO CLOSE'和 A.在@StartDate和@EndDate)之间的日期解析)或 (@RecordType“已关闭”和 @记录类型“请求关闭”) );

Sql (续) 从Asgnmnt 式中(CallID=C.CallID)) 和上限(A.GroupName)=@GroupName 并在(@Assignee)中降低(A.EMail) 和上限(C.CallStatus)=@RecordType 和(@RecordType='CLOSED'和 C.在@StartDate和@EndDate)之间的结束日期)或 (@RecordType='REQUEST TO CLOSE'和 A.在@StartDate和@EndDate)之间的日期解析)或 (@RecordType“已关闭”和 @记录类型“请求关闭”) );,sql,sql-server,database,Sql,Sql Server,Database,我已接受您的WHERE条款中的前四个条件。对于第五个条件,我没有使用大小写,而是选择了使用和、或和圆括号的等效形式。@StartDate和@EndDate之间的第一个子条件@RecordType='CLOSED'和C.ClosedDate相当于您在时的第一个子条件。第二个子条件@RecordType='REQUEST TO CLOSE'和A.DateResolv(介于@StartDate和@EndDate之间)与第二个等价。第三个子条件将允许满足其他条件的所有记录,其中@RecordType既不

我已接受您的
WHERE
条款中的前四个条件。对于第五个条件,我没有使用
大小写
,而是选择了使用
和圆括号的等效形式。@StartDate和@EndDate之间的第一个子条件
@RecordType='CLOSED'和C.ClosedDate
相当于您在时的第一个子条件
。第二个子条件
@RecordType='REQUEST TO CLOSE'和A.DateResolv(介于@StartDate和@EndDate之间)
与第二个
等价。第三个子条件将允许满足其他条件的所有记录,其中
@RecordType
既不是
关闭的
,也不是
请求关闭的
。如果您希望在这些情况下返回空集,则应删除第三个子条件

从第四个
WHERE
条件开始,其中
UPPER(C.CallStatus)
等于
CLOSED
请求关闭
,那么
@RecordType
也将如此。因此,在您的第五种情况下,我用
@RecordType
替换了
UPPER(C.CallStatus)
。除了可读性稍高之外,这还消除了语句中的四个函数调用,从而提高了语句的效率

我还将您的
案例
从语句的早期修改为使用更少函数调用的等效条件,这些条件(可以说)更容易阅读,并且与字段别名更清晰地平行

如果您有任何问题或意见,请随时发表相应的评论

进一步阅读


其中column1=条件为case when条件时,则值为else column1结束。在这两种情况下都要这样做。那么您对此查询有什么问题?您能在这里显示一些示例数据和所需的输出吗?我只想在满足条件的情况下包含在where子句中此查询有什么问题?您似乎已经正确地实现了您的需求。其中column1=case when condition然后value else column1 end。在这两种情况下都要这样做。那么您对此查询有什么问题?您能在这里显示一些示例数据和所需的输出吗?我只想在满足条件的情况下包含在where子句中此查询有什么问题?您似乎已经正确地实现了您的需求。
SELECT C.CallID, A.GroupName,A.Assignee, C.CallStatus, C.RecvdDate, C.Urgency, C.Category, C.CallType, C.KPIreport, C.CallDesc,
DATEDIFF(DAY, C.RecvdDate,GETDATE()) [DurationInDays],
CASE 
    WHEN DATEDIFF(DAY, C.RecvdDate,GETDATE()) < 30 
        THEN 'Less than 30'
    WHEN DATEDIFF(DAY, C.RecvdDate,GETDATE()) >= 30 AND DATEDIFF(DAY, C.RecvdDate,GETDATE()) < 60  
        THEN '30-59'
    WHEN DATEDIFF(DAY, C.RecvdDate,GETDATE()) >= 60 AND DATEDIFF(DAY, C.RecvdDate,GETDATE()) < 90  
        THEN '60-89'
    WHEN DATEDIFF(DAY, C.RecvdDate,GETDATE()) >= 90 AND DATEDIFF(DAY, C.RecvdDate,GETDATE()) < 120  
        THEN '90-119'
    WHEN DATEDIFF(DAY, C.RecvdDate,GETDATE()) >= 120 
        THEN 'Over 120'
END 

AS 'AgeClassification'

FROM
    CallLog C
    INNER JOIN Asgnmnt A ON C.CallID = A.CallID
WHERE
    A.HEATSeq =(SELECT MAX(HEATSeq)FROM Asgnmnt WHERE (CallID = C.CallID))
    AND UPPER(A.GroupName) = @GroupName
    AND LOWER(A.EMail) IN (@Assignee)
    AND UPPER(C.CallStatus) = @RecordType

    AND 
    CASE WHEN UPPER(C.CallStatus) = 'CLOSED' THEN
            C.ClosedDate >= @StartDate AND C.ClosedDate <= @EndDate
         WHEN UPPER(C.CallStatus) = 'REQUEST TO CLOSE' THEN
            A.DateResolv >= @StartDate AND A.DateResolv <=@EndDate
    END




ORDER BY A.GroupName, A.Assignee,  C.RecvdDate, C.CallID
SELECT C.CallID, 
       A.GroupName, 
       A.Assignee, 
       C.CallStatus, 
       C.RecvdDate, 
       C.Urgency, 
       C.Category, 
       C.CallType, 
       C.KPIreport, 
       C.CallDesc, 
       Datediff(DAY, C.RecvdDate, Getdate()) [DurationInDays], 
       CASE 
         WHEN Datediff(DAY, C.RecvdDate, Getdate()) < 30 THEN 'Less than 30' 
         WHEN Datediff(DAY, C.RecvdDate, Getdate()) >= 30 
              AND Datediff(DAY, C.RecvdDate, Getdate()) < 60 THEN '30-59' 
         WHEN Datediff(DAY, C.RecvdDate, Getdate()) >= 60 
              AND Datediff(DAY, C.RecvdDate, Getdate()) < 90 THEN '60-89' 
         WHEN Datediff(DAY, C.RecvdDate, Getdate()) >= 90 
              AND Datediff(DAY, C.RecvdDate, Getdate()) < 120 THEN '90-119' 
         WHEN Datediff(DAY, C.RecvdDate, Getdate()) >= 120 THEN 'Over 120' 
       END                                   AS 'AgeClassification' 
FROM   CallLog C 
       INNER JOIN Asgnmnt A 
               ON C.CallID = A.CallID 
WHERE  A.HEATSeq = (SELECT Max(HEATSeq) 
                    FROM   Asgnmnt 
                    WHERE  ( CallID = C.CallID )) 
       AND Upper(A.GroupName) = @GroupName 
       AND Lower(A.EMail) IN ( @Assignee ) 
       AND Upper(C.CallStatus) = @RecordType 
       AND C.ClosedDate BETWEEN IIF(Upper(C.CallStatus) = 'CLOSED', @StartDate, C.ClosedDate) 
                        AND IIF(Upper(C.CallStatus) = 'CLOSED', @EndDate, C.ClosedDate) 
       AND C.DateResolv BETWEEN IIF(Upper(C.CallStatus) = 'REQUEST TO CLOSE', @StartDate, C.DateResolv) 
                        AND IIF(Upper(C.CallStatus) = 'REQUEST TO CLOSE',@EndDate, C.DateResolv) 
ORDER  BY A.GroupName, 
          A.Assignee, 
          C.RecvdDate, 
          C.CallID  
SELECT C.CallID, A.GroupName,A.Assignee, C.CallStatus, C.RecvdDate, 
       C.Urgency, C.Category, C.CallType, C.KPIreport, C.CallDesc,
       DATEDIFF(DAY, C.RecvdDate,GETDATE()) [DurationInDays],
       CASE 
          WHEN (DATEDIFF(DAY, C.RecvdDate,GETDATE()) < 30) THEN 'Less than 30'
          WHEN (DATEDIFF(DAY, C.RecvdDate,GETDATE()) >= 30 AND DATEDIFF(DAY, C.RecvdDate,GETDATE()) < 60) THEN '30-59'
          WHEN (DATEDIFF(DAY, C.RecvdDate,GETDATE()) >= 60 AND DATEDIFF(DAY, C.RecvdDate,GETDATE()) < 90) THEN '60-89'
          WHEN (DATEDIFF(DAY, C.RecvdDate,GETDATE()) >= 90 AND DATEDIFF(DAY, C.RecvdDate,GETDATE()) < 120) THEN '90-119'
          WHEN (DATEDIFF(DAY, C.RecvdDate,GETDATE()) >= 120)  THEN 'Over 120'
       END  AS 'AgeClassification'
FROM CallLog C
INNER JOIN Asgnmnt A ON C.CallID = A.CallID
WHERE A.HEATSeq =(SELECT MAX(HEATSeq)FROM Asgnmnt WHERE (CallID = C.CallID))
AND UPPER(A.GroupName) = @GroupName
AND LOWER(A.EMail) IN (@Assignee)
AND UPPER(C.CallStatus) = @RecordType
AND (CASE 
    WHEN UPPER(C.CallStatus) = 'CLOSED' THEN C.ClosedDate
    WHEN UPPER(C.CallStatus) = 'REQUEST TO CLOSE' THEN A.DateResolv
END) BETWEEN @StartDate AND @EndDate
ORDER BY A.GroupName, A.Assignee,  C.RecvdDate, C.CallID
SELECT C.CallID,
       A.GroupName,
       A.Assignee,
       C.CallStatus,
       C.RecvdDate,
       C.Urgency,
       C.Category,
       C.CallType,
       C.KPIreport,
       C.CallDesc,
       DATEDIFF( DAY,
                 C.RecvdDate,
                 GETDATE() ) AS DurationInDays,
       CASE
           WHEN DATEDIFF( DAY,
                          C.RecvdDate,
                          GETDATE() ) < 30 THEN
               'Less than 30'
           WHEN DATEDIFF( DAY,
                          C.RecvdDate,
                          GETDATE() ) BETWEEN 30 AND 59
               '30-59'
           WHEN DATEDIFF( DAY,
                          C.RecvdDate,
                          GETDATE() ) BETWEEN 60 AND 89
               '60-89'
           WHEN DATEDIFF( DAY,
                          C.RecvdDate,
                          GETDATE() ) BETWEEN 90 AND 119
               '90-119'
           WHEN DATEDIFF( DAY,
                          C.RecvdDate,
                          GETDATE() ) >= 120 THEN
               '120 or over'
       END AS 'AgeClassification'
FROM
    CallLog C
    INNER JOIN Asgnmnt A ON C.CallID = A.CallID
WHERE
    A.HEATSeq =( SELECT MAX( HEATSeq )
                 FROM Asgnmnt
                 WHERE ( CallID = C.CallID ) )
    AND UPPER( A.GroupName ) = @GroupName
    AND LOWER( A.EMail ) IN ( @Assignee )
    AND UPPER( C.CallStatus ) = @RecordType
    AND ( ( @RecordType = 'CLOSED' AND
            C.ClosedDate BETWEEN @StartDate AND @EndDate ) OR
           ( @RecordType = 'REQUEST TO CLOSE' AND
             A.DateResolv BETWEEN @StartDate AND @EndDate ) OR
           ( @RecordType <> 'CLOSED' AND
             @RecordType <> 'REQUEST TO CLOSE' )
        );