关于CASE中使用聚合函数时的一点经验

news/2024/7/8 1:55:39 标签: 大数据

先不要管以下代码是完成什么功能
--==片段1==
select
    case when SUM(isnull(ACTVTY_DURTN,0))>=1 then 1 else SUM(isnull(ACTVTY_DURTN,0)) end as DURTN
,OWNR_EMP_ID_NK
from dbo.ECMS_Activity_DIMN AC
    
    WHERE AC.APPT_STRT_DT_TZ BETWEEN '201208' AND '201209'
    AND AC.actvty_main_type = 'Coaching'    
    AND AC.CURR_RECRD_FLG='Y'
              --===========================
    --错误:Column 'dbo.ECMS_Activity_DIMN.OWNR_EMP_ID_NK' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
   
--==片段2==
    --无错
    select
    distinct
    CASE WHEN CAST(APPT_STRT_DT_TZ AS TIME(6))<='12:00:00' THEN 'Call_AM' ELSE 'Call_PM' end Call_Period,
    CAST(APPT_STRT_DT_TZ as date) as CallDate,
    OWNR_EMP_ID_NK
from dbo.ECMS_Activity_DIMN AC
    
    WHERE AC.APPT_STRT_DT_TZ BETWEEN '201208' AND '201209'
    AND AC.ACTVTY_MAIN_TYPE='Professional Call' AND AC.ACTVTY_SUBTYPE_CALL in(N'完整拜访',N'简短拜访')
    AND AC.CURR_RECRD_FLG='Y' and AC.ACTVTY_STS_CD='Submit'
 
片段1为什么会报错,百思不得其解。检查语法正常,一执行就提示错误。按提示加 GROUP BY OWNR_EMP_ID_NK 后,确实无错了,为什么呢
问了一朋友后得到如下答案:
 
你case里面用聚合函数,需要制定group by,要么就都用聚合函数
不能有的用聚合,有的不用聚合,还没有group by
一般也不会吧聚合函数放在case中
确实是我在片段1的CASE中使用了SUM聚合函数而片段2中没有。
按照上面这段话,我故意修改片段1 中OWNR_EMP_ID_NK为MAX(OWNR_EMP_ID_NK) ,执行也没错了
 
 
朋友看了我的片段1说很不理想,然后写出如下片段
--3优化的写法
    DECLARE @DurtnSum DECIMAL;
SELECT @DurtnSum = SUM(COALESCE(ACTVTY_DURTN,0)) FROM dbo.ECMS_Activity_DIMN AC
WHERE AC.APPT_STRT_DT_TZ BETWEEN '201208' AND '201209'
AND AC.actvty_main_type = 'Coaching'
AND AC.CURR_RECRD_FLG = 'Y'
IF @DurtnSum > 1 OR @DurtnSum = 1
BEGIN
    SET @DurtnSum = 1
END
SELECT @DurtnSum AS DURTN ,
OWNR_EMP_ID_NK
FROM dbo.ECMS_Activity_DIMN AC
WHERE AC.APPT_STRT_DT_TZ BETWEEN '201208' AND '201209'
AND AC.actvty_main_type = 'Coaching'
AND AC.CURR_RECRD_FLG = 'Y'

最后说说这段代码是做什么的:
 
一天开一个会算0.5个单位,一天里可以开N个会,但一天最多计1个单位,返回每个人每天的单位
 

转载于:https://www.cnblogs.com/net515/archive/2012/10/09/2716658.html


http://www.niftyadmin.cn/n/1478534.html

相关文章

UnQLite简介

UnQLite是&#xff0c;由 Symisc Systems公司出品的一个嵌入式C语言软件库&#xff0c;它实现了一个自包含、无服务器、零配置、事务化的NoSQL数据库引擎。UnQLite是一个文档存储数据库&#xff0c;类似于MongoDB、Redis、CouchDB等。同时&#xff0c;也是一个标准的Key/Value存…

网页高度计算方法

document.compatMode(声明是转的&#xff0c;只是为了记下来&#xff0c;以后好用啊。嘿嘿) 对于document.compatMode&#xff0c;很多朋友可能都根我一样很少接触&#xff0c;知道他的存在却不清楚他的用途。今天在ext中看到 document.compatMode的使用&#xff0c;感觉这个对…

linux系统中软盘的名称,linux中软盘的使用

linux中软盘的使用发布时间:2008-04-16 01:28:21来源:红联作者:nutra前两天去面试&#xff0c;做了一份试卷&#xff0c;就一道题没答出来&#xff0c;那张卷子的第一道题&#xff0c;“linux下怎么挂载软盘“后面其它的写脚本什么的都搞定了&#xff0c;就这一个卡了&#xff…

linux系统解压.tar.gz文件命令,linux中tar命令怎么解压.tgz与.tar.gz文件-linux-操作系统-壹聚...

在linux中.tgz是.tar.gz的缩写&#xff0c;我们在解压.tgz文件时可直接使用tar命令来操作,有需要了解的朋友可参考参考。如&#xff1a;将文件解压在当前目录&#xff1a;代码如下复制代码tar zxvf MY_NAME.tgz 或者 tar zxvf MY_NAME.tar.gz例&#xff1a;查看usr.tar备份文…

linux驱动无法绑定,LINUX驱动手动绑定和解绑定

Linux内核从2.6.13-rc3开始&#xff0c;提供了在用户空间&#xff0c;可动态的绑定和解绑定设备和设备驱动之间关系的功能。在这之前&#xff0c;只能通过insmod(modprobe)和rmmod来绑定和解绑&#xff0c;而且这种绑定和解绑都是针对驱动和所有设备的。而新的功能可以设置驱动…

管道文件 linux 流程图,怎样绘制工艺管道仪表流程图(PID图)和工艺流程图

工艺流程图是化工生产的技术核心&#xff0c;包含了物料平衡、设备、仪表、阀门、管路等信息&#xff0c;无论是设计院的工程师、化工厂的工艺员&#xff0c;还是中控控制室的主操&#xff0c;能看能画工艺流程图&#xff0c;都是必不可少的技能。今天昌晖仪表向大家介绍工艺流…

Adobe将于2020年末停止对Flash的支持

Adobe宣布将在2020年末终止Flash服务。各大浏览器供应商已经分别发布了时间线&#xff0c;概述了在浏览器上逐步淘汰这项技术的计划。\\Adobe最终决定终结Flash&#xff0c;建议网页开发者使用HTML5作为替代&#xff1a;\\\Adobe计划终结Flash。我们将于2020年末停止对Flash Pl…

linux无人值守安装实验,linux无人值守安装实验报告.docx

Linux 无人值守安装实验报告组员&#xff1a;董波英、王云涛、高锦峰 2008.12/9 星期二方案介绍首先设置一个启动服务器和一个安装服务器(可以配置在同一台物理机上) &#xff0c;然后通过网络 启动存放在启动服务器上的安装程序。 安装程序会自动访问存放在安装服务器上的安装…