唉,最近遇到sql查询的问题,想了下没有思路,还请高手们帮我看下,如何写这样的Sql 语句 ,谢谢。。
首先要在这里要谢谢大家,第二题的产品数据是存在问题的。现在详细看了下。并修改了。且而这些问题,我已经解决了。谢谢
2)表数据下:
产品 颜色 数量
产品1 蓝色 45
产品1 红色 40
产品2 红色 33
产品2 蓝色 45
产品3 红色 66
产品3 蓝色 null
产品4 红色 45
产品4 蓝色 76
产品5 红色 80
产品6 红色 90
1>根据产品颜色分别计算产品数量及它们之间的差额,并展示 产品列 差额值。
with test2 as (
select '产品1' as 产品 , '蓝色'as 颜色 , 45 as 数量
union all
select '产品1', '红色' , 40
union all
select '产品2', '红色', 33
union all
select '产品2', '蓝色', 45
union all
select '产品3' , '红色', 66
union all
select '产品3' , '蓝色', null
union all
select '产品4' , '红色', 45
union all
select '产品4', '蓝色', 76
union all
select '产品5' , '红色' , 80
union all
select '产品6' ,'红色' ,90
)
select 产品, (SUM(case 颜色 when '蓝色' then 数量 else 0 end)-SUM(case 颜色 when '红色' then 数量 else 0 end)) 差额值 from test2 group by 产品
2>统计产品
产品 蓝色 红色
-- 产品 颜色 数量
with test1 as (
select '产品1' as 产品 , '蓝色'as 颜色 , 45 as 数量
union all
select '产品1', '红色' , 40
union all
select '产品2', '红色', 33
union all
select '产品2', '蓝色', 45
union all
select '产品3' , '红色', 66
union all
select '产品3' , '蓝色', null
union all
select '产品4' , '红色', 45
union all
select '产品4', '蓝色', 76
union all
select '产品5' , '红色' , 80
union all
select '产品6' ,'红色' ,90
)
select MAX(产品)产品, sum(case 颜色 when '蓝色' then 数量 else 0 end ) as 蓝色,SUM(case 颜色 when '红色' then 数量 else 0 end) as 红色 from test1 group by 产
品
第一题:
with test as (
select 2015-01-02 日期 , 3 数量
union all
select 2015-01-02 , 2
union all
select 2015-01-02 , 1
union all
select 2015-01-02 , 0
union all
select 2015-01-03 , 0)
select * from test where 日期 in (select max(日期)as 日期 from test group by 日期 having COUNT(日期)>1 ) and 数量<>0
union all
select * from test where 日期 in (select max(日期)as 日期 from test group by 日期 having COUNT(日期)=1 )
业务逻辑不是很清楚啊。。。
第一个是不是要求:若有非零数据则获取非零数据,若没有非零数据则取0?
第二个每个产品都只有一条数据,就只有一个颜色,怎么计算差值?难道要获得差值为45或者-40之类的?
这个多想想应该很简单
嗯,给点思路。
第二题(1)好像有点绕啊,其他还行
第一 ,怎么写呢?
第一个不考虑性能可以:select 日期,max(数量) from table group by 日期
第二道题是不是错了,应该是每种产品对应两个颜色。
谢谢大家,这些问题我自己解决了。