SQL行转列(case when then )

来源:互联网 发布:盘点数据管理制度 编辑:程序博客网 时间:2024/04/29 16:04

首先看我准备一张数据表(这是做一个数据测试的表,就相当于它们,一天打好几场球)

没错,就需要得到箭头指向的数据表,从数据表结构看出,应该会用到sum加和函数,

同时还会用到分组函数,不同日期的分组

 select distinct Date, sum(case Result when '胜利' then 1 else 0 end)as '胜利', //当判断为胜利的时候1 不是当然是0 sum+0=sum sum(case Result when ''    then  1 else 0 end)as '' from Game group by date //给日期分组//话语来解释:找到 Result 当为 '胜利' 表示 1 反之 表示 0 end(结束 有点像if else 的感觉)

上面是一个例子。下面看一下 case when 的语法

关于Case when 主要有两种语法的用法

复制代码
//----------ome-------------------------------------case 字段         when '子段值' then '表示的结果值'          when '字段2' then '表示的结果值2 '       else '其他' end  //---------这种和swtic类似//----------two-------------------------------------------case when sex='1' then ''         when sex='0' then ''else '其他' end
复制代码

以上两种方式都可以实现相同的功能!

case when 字段 用法:

下面用 case 字段 when 用法

//下面插入代码:

?
/****** Script for SelectTopNRows commandfrom SSMS ******/
SELECT [ID]
,[Name]
,[SerialNumber]
,[Qty],(casewhen 0<Qty andQty<=2000 then 'C等级'
when2000<Qty and Qty<=3000 then 'B等级'
else
'超级A'end)as等级
FROM[RTest].[dbo].[Produc]
//--------------------------------------------------------------------------
SELECT[ID]
,[Name]
,[SerialNumber]
,[Qty],caseName when '三星XXJ' then '韩国'
when'苹果4' then '美国'
when'苹果5' then '美国'
when'wphone8' then '美国'
when'宏基' then '中国台湾'
when'联想' then '中国大陆'
else
'山寨'
endas '地区'
FROM[RTest].[dbo].[Produc]
0 0