case+when+then+else+end

本文介绍了一个使用SQL进行条件判断的示例,展示了如何根据学生性别字段返回对应的中文描述。此案例利用了CASE WHEN语句来实现简单的逻辑判断。
select name 姓名,case sex when boy then 男 else 女 end from student
sql中用于选择判断
ALTER PROCEDURE [dbo].[SL_P_Seo_SD_Class] @YEAR VARCHAR(50), @AREA VARCHAR(50) AS set nocount on begin SELECT 'SD非常规' AS SD非常规, T4.FName AS 小类, CONVERT(varchar(7), b.FDate, 120) AS 年月, SUM(a.FAuxQty) AS 合计数量, SUM(a.FConsignAmount) AS 合计金额, t3.FModel AS 型号, t3.FName AS 名称, t3.FNumber AS 代码 INTO #Seo_SD_Class FROM dbo.ICStockBillEntry AS a LEFT OUTER JOIN dbo.ICStockBill AS b ON a.FInterID = b.FInterID LEFT OUTER JOIN dbo.t_Organization AS t2 ON b.FSupplyID = t2.FItemID LEFT OUTER JOIN dbo.t_ICItem AS t3 ON t3.FItemID = a.FItemID LEFT OUTER JOIN dbo.t_Emp AS t7 ON t7.FItemID = t2.Femployee LEFT OUTER JOIN dbo.t_SubMessage AS t4 ON t4.FInterID = T3.F_131 LEFT OUTER JOIN --dbo.t_SubMessage AS t6 ON t6.FInterID = t3.FTypeID LEFT OUTER JOIN --dbo.CRM_Province AS t8 ON t8.FID = t2.FProvinceID LEFT OUTER JOIN t_SeoStockoutEntry t10 on t10.FItemId=a.FItemID WHERE (a.FItemId NOT IN (SELECT FItemID FROM t_SeoStockoutEntry)) AND (b.FDate like '%'+@YEAR+'%') and ( b.FHeadSelfB0163 like '%'+isnull(@AREA,b.FHeadSelfB0163)+'%') and (b.FTranType = 21) AND (b.FStatus <>0) AND (b.FCancellation = 0) AND T4.FParentID=10019 GROUP BY t3.FModel, b.FDate, t3.FNumber, t3.FName, b.FHeadSelfB0163,t10.FItemId,a.FItemID ,t2.FName,T4.FNAME select isnull(SD非常规,'合计') as 大类 ,isnull(小类,'合计') as 小类 ,SUM(case 年月 when @YEAR+'-01' then 合计数量 else 0 end) as '一月数量' ,SUM(case 年月 when @YEAR+'-01' then 合计金额 else 0 end) as '一月金额' ,SUM(case 年月 when @YEAR+'-02' then 合计数量 else 0 end) as '二月数量' ,SUM(case 年月 when @YEAR+'-02' then 合计金额 else 0 end) as '二月金额' ,SUM(case 年月 when @YEAR+'-03' then 合计数量 else 0 end) as '三月数量' ,SUM(case 年月 when @YEAR+'-03' then 合计金额 else 0 end) as '三月金额' ,SUM(case 年月 when @YEAR+'-04' then 合计数量 else 0 end) as '四月数量' ,SUM(case 年月 when @YEAR+'-04' then 合计金额 else 0 end) as '四月金额' ,SUM(case 年月 when @YEAR+'-05' then 合计数量 else 0 end) as '五月数量' ,SUM(case 年月 when @YEAR+'-05' then 合计金额 else 0 end) as '五月金额' ,SUM(case 年月 when @YEAR+'-06' then 合计数量 else 0 end) as '六月数量' ,SUM(case 年月 when @YEAR+'-06' then 合计金额 else 0 end) as '六月金额' ,SUM(case 年月 when @YEAR+'-07' then 合计数量 else 0 end) as '七月数量' ,SUM(case 年月 when @YEAR+'-07' then 合计金额 else 0 end) as '七月金额' ,SUM(case 年月 when @YEAR+'-08' then 合计数量 else 0 end) as '八月数量' ,SUM(case 年月 when @YEAR+'-08' then 合计金额 else 0 end) as '八月金额' ,SUM(case 年月 when @YEAR+'-09' then 合计数量 else 0 end) as '九月数量' ,SUM(case 年月 when @YEAR+'-09' then 合计金额 else 0 end) as '九月金额' ,SUM(case 年月 when @YEAR+'-10' then 合计数量 else 0 end) as '十月数量' ,SUM(case 年月 when @YEAR+'-10' then 合计金额 else 0 end) as '十月金额' ,SUM(case 年月 when @YEAR+'-11' then 合计数量 else 0 end) as '十一月数量' ,SUM(case 年月 when @YEAR+'-11' then 合计金额 else 0 end) as '十一月金额' ,SUM(case 年月 when @YEAR+'-12' then 合计数量 else 0 end) as '十二月数量' ,SUM(case 年月 when @YEAR+'-12' then 合计金额 else 0 end) as '十二月金额' ,SUM(case 年月 when @YEAR+'-01' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-02' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-03' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-04' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-05' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-06' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-07' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-08' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-09' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-10' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-11' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-12' then 合计数量 else 0 end) as '合计数量' ,SUM(case 年月 when @YEAR+'-01' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-02' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-03' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-04' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-05' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-06' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-07' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-08' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-09' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-10' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-11' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-12' then 合计金额 else 0 end) as '合计金额' from #Seo_SD_Class where 年月 like '%'+@YEAR+'%' and 小类 is not null group by SD非常规,小类 with rollup SELECT 'SD常规' AS SD常规, T4.FName AS 小类, CONVERT(varchar(7), b.FDate, 120) AS 年月, SUM(a.FAuxQty) AS 合计数量, SUM(a.FConsignAmount) AS 合计金额, t3.FModel AS 型号, t3.FName AS 名称, t3.FNumber AS 代码 INTO #Seo_SD_Class2 FROM dbo.ICStockBillEntry AS a LEFT OUTER JOIN dbo.ICStockBill AS b ON a.FInterID = b.FInterID LEFT OUTER JOIN dbo.t_Organization AS t2 ON b.FSupplyID = t2.FItemID LEFT OUTER JOIN dbo.t_ICItem AS t3 ON t3.FItemID = a.FItemID LEFT OUTER JOIN dbo.t_Emp AS t7 ON t7.FItemID = t2.Femployee LEFT OUTER JOIN dbo.t_SubMessage AS t4 ON t4.FInterID = T3.F_131 LEFT OUTER JOIN --dbo.t_SubMessage AS t6 ON t6.FInterID = t3.FTypeID LEFT OUTER JOIN --dbo.CRM_Province AS t8 ON t8.FID = t2.FProvinceID LEFT OUTER JOIN t_SeoStockoutEntry t10 on t10.FItemId=a.FItemID WHERE (a.FItemId IN (SELECT FItemID FROM t_SeoStockoutEntry)) AND (b.FDate like '%'+@YEAR+'%') and ( b.FHeadSelfB0163 like '%'+isnull(@AREA,b.FHeadSelfB0163)+'%') and (b.FTranType = 21) AND (b.FStatus <>0) AND (b.FCancellation = 0) AND T4.FParentID=10019 GROUP BY t3.FModel, b.FDate, t3.FNumber, t3.FName, b.FHeadSelfB0163,t10.FItemId,a.FItemID ,t2.FName,T4.FNAME select isnull(SD常规,'合计') as 大类 ,isnull(小类,'合计') as 小类 ,SUM(case 年月 when @YEAR+'-01' then 合计数量 else 0 end) as '一月数量' ,SUM(case 年月 when @YEAR+'-01' then 合计金额 else 0 end) as '一月金额' ,SUM(case 年月 when @YEAR+'-02' then 合计数量 else 0 end) as '二月数量' ,SUM(case 年月 when @YEAR+'-02' then 合计金额 else 0 end) as '二月金额' ,SUM(case 年月 when @YEAR+'-03' then 合计数量 else 0 end) as '三月数量' ,SUM(case 年月 when @YEAR+'-03' then 合计金额 else 0 end) as '三月金额' ,SUM(case 年月 when @YEAR+'-04' then 合计数量 else 0 end) as '四月数量' ,SUM(case 年月 when @YEAR+'-04' then 合计金额 else 0 end) as '四月金额' ,SUM(case 年月 when @YEAR+'-05' then 合计数量 else 0 end) as '五月数量' ,SUM(case 年月 when @YEAR+'-05' then 合计金额 else 0 end) as '五月金额' ,SUM(case 年月 when @YEAR+'-06' then 合计数量 else 0 end) as '六月数量' ,SUM(case 年月 when @YEAR+'-06' then 合计金额 else 0 end) as '六月金额' ,SUM(case 年月 when @YEAR+'-07' then 合计数量 else 0 end) as '七月数量' ,SUM(case 年月 when @YEAR+'-07' then 合计金额 else 0 end) as '七月金额' ,SUM(case 年月 when @YEAR+'-08' then 合计数量 else 0 end) as '八月数量' ,SUM(case 年月 when @YEAR+'-08' then 合计金额 else 0 end) as '八月金额' ,SUM(case 年月 when @YEAR+'-09' then 合计数量 else 0 end) as '九月数量' ,SUM(case 年月 when @YEAR+'-09' then 合计金额 else 0 end) as '九月金额' ,SUM(case 年月 when @YEAR+'-10' then 合计数量 else 0 end) as '十月数量' ,SUM(case 年月 when @YEAR+'-10' then 合计金额 else 0 end) as '十月金额' ,SUM(case 年月 when @YEAR+'-11' then 合计数量 else 0 end) as '十一月数量' ,SUM(case 年月 when @YEAR+'-11' then 合计金额 else 0 end) as '十一月金额' ,SUM(case 年月 when @YEAR+'-12' then 合计数量 else 0 end) as '十二月数量' ,SUM(case 年月 when @YEAR+'-12' then 合计金额 else 0 end) as '十二月金额' ,SUM(case 年月 when @YEAR+'-01' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-02' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-03' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-04' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-05' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-06' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-07' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-08' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-09' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-10' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-11' then 合计数量 else 0 end) + SUM(case 年月 when @YEAR+'-12' then 合计数量 else 0 end) as '合计数量' ,SUM(case 年月 when @YEAR+'-01' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-02' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-03' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-04' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-05' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-06' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-07' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-08' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-09' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-10' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-11' then 合计金额 else 0 end) + SUM(case 年月 when @YEAR+'-12' then 合计金额 else 0 end) as '合计金额' from #Seo_SD_Class2 where 年月 like '%'+@YEAR+'%' and 小类 is not null group by SD常规,小类 with rollup SELECT * FROM #Seo_SD_Class2 UNION --合并 SELECT * FROM #Seo_SD_Class DROP TABLE #Seo_SD_Class DROP TABLE #Seo_SD_Class2 END 优化以上语句
07-12
【postgresql】希望sum相除后的值可以保留小数点后2位,SELECT ( SUM( (CASE WHEN g3_left_areatype1 = '1' THEN 1 ELSE 0 END) + (CASE WHEN g3_left_areatype2 = '1' THEN 1 ELSE 0 END) + (CASE WHEN g3_left_areatype3 = '1' THEN 1 ELSE 0 END) + (CASE WHEN g3_left_areatype4 = '1' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype1 = '1' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype2 = '1' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype3 = '1' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype4 = '1' THEN 1 ELSE 0 END) )/(sum((CASE WHEN g3_left_areatype1 notnull THEN 1 ELSE 0 END))*8)) AS total_ok, SUM( (CASE WHEN g3_left_areatype1 = '2' THEN 1 ELSE 0 END) + (CASE WHEN g3_left_areatype2 = '2' THEN 1 ELSE 0 END) + (CASE WHEN g3_left_areatype3 = '2' THEN 1 ELSE 0 END) + (CASE WHEN g3_left_areatype4 = '2' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype1 = '2' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype2 = '2' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype3 = '2' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype4 = '2' THEN 1 ELSE 0 END) ) AS total_duo, SUM( (CASE WHEN g3_left_areatype1 = '3' THEN 1 ELSE 0 END) + (CASE WHEN g3_left_areatype2 = '3' THEN 1 ELSE 0 END) + (CASE WHEN g3_left_areatype3 = '3' THEN 1 ELSE 0 END) + (CASE WHEN g3_left_areatype4 = '3' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype1 = '3' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype2 = '3' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype3 = '3' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype4 = '3' THEN 1 ELSE 0 END) ) AS total_shao, SUM( (CASE WHEN g3_left_areatype1 = '4' THEN 1 ELSE 0 END) + (CASE WHEN g3_left_areatype2 = '4' THEN 1 ELSE 0 END) + (CASE WHEN g3_left_areatype3 = '4' THEN 1 ELSE 0 END) + (CASE WHEN g3_left_areatype4 = '4' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype1 = '4' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype2 = '4' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype3 = '4' THEN 1 ELSE 0 END) + (CASE WHEN g3_right_areatype4 = '4' THEN 1 ELSE 0 END) ) AS total_y, (sum((CASE WHEN g3_left_areatype1 notnull THEN 1 ELSE 0 END))*8) as total FROM bcm_data_log_record_1_2025; ,如何修改这个sql语句
最新发布
11-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值