34,590
社区成员
发帖
与我相关
我的任务
分享
--测试代码--
create table product(id int not null primary key identity(1,1),name varchar(50),
jiage varchar(50),changdi varchar(50),leibie varchar(50))
insert into product(name,jiage,changdi,leibie) values('苹果','5元','浙江','水果')
insert into product(name,jiage,changdi,leibie) values('香蕉','20元','上海','水果')
insert into product(name,jiage,changdi,leibie) values('黄瓜','1元','浙江','蔬菜')
insert into product(name,jiage,changdi,leibie) values('西红柿','2元','浙江','蔬菜')
--我的代码--
select
sum(case leibie when '水果' then cast(substring(jiage,1,len(jiage)-1) as int) end) as 水果,
sum(case leibie when '蔬菜' then cast(substring(jiage,1,len(jiage)-1) as int) end) as 蔬菜
from product group by leibie
/*
水果 蔬菜
NULL 3
25 NULL
--怎么把null去掉 就只有一行,不要两行呢?--
*/
select
case leibie when '水果' then sum(cast(substring(jiage,1,len(jiage)-1) as int)) end as 水果,
case leibie when '蔬菜' then sum(cast(substring(jiage,1,len(jiage)-1) as int)) end as 蔬菜
from product
select
sum(case leibie when '水果' then cast(substring(jiage,1,len(jiage)-1) as int) end) as 水果,
sum(case leibie when '蔬菜' then cast(substring(jiage,1,len(jiage)-1) as int) end) as 蔬菜
from
/*
这两个一个sum在then后面 一个sum在case外面,在then后面的执行不成功,
是因为sum是聚合函数,在里面的话统计不了值,因为是一行一行执行的。是这个原因吗?还是什么原因?
*/
select
sum(isnull(case leibie when '水果' then cast(substring(jiage,1,len(jiage)-1) as int) end),0) as 水果,
sum(isnull(case leibie when '蔬菜' then cast(substring(jiage,1,len(jiage)-1) as int) end),0) as 蔬菜
from product group by leibie
select
max(case leibie when '水果' then cast(substring(jiage,1,len(jiage)-1) as int) end) as 水果,
max(case leibie when '蔬菜' then cast(substring(jiage,1,len(jiage)-1) as int) end) as 蔬菜
from product group by leibie
select
case leibie when '水果' then sum(cast(substring(jiage,1,len(jiage)-1) as int)) end as 水果,
case leibie when '蔬菜' then sum(cast(substring(jiage,1,len(jiage)-1) as int)) end as 蔬菜
from product
--然后出错 选择列表中的列 'product.leibie' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。--