还是一道sql语句的题好难。。求解

图片说明

求路过高手,大神给看看,务必于今晚之前拿下!!不然会被炒鱿鱼的!!

考试题?
SELECT '1' 列名,(SELECT SUM(数值列) FROM 表 WHERE NAME = 'aa') aa, (SELECT SUM(数值列) FROM 表 WHERE NAME = 'bb') bb,
(SELECT SUM(数值列) FROM 表 WHERE NAME = 'cc') cc,(SELECT SUM(数值列) FROM 表 WHERE NAME = 'dd') dd FROM dual;

content不太对

这不是 select name ,sum(nums) from demo group by name?

select sum(nums) as name from demo
GROUP BY name

2楼正解,不过楼主是DBA吗?基础知识不太牢固

SELECT SUM(nums) FROM demo GROUP BY name

表名:Sum_Test

Id Name Count Type

1 A 12 1
2 B 12 1
3 C 12 1
4 D 12 1
5 B 12 2
6 B 12 1
7 A 12 2
8 A 12 1
9 C 12 1
10 B 12 1

结果: Type 1 : 84
Type 2 : 36

求type 为1和2的Count的总和,如果Name即有Type为1也有Type为2的,则该Count算到Type为2的里面,如: A

Type即有1也有2则A的求和时将A的Count值全部算作为Type=2里面

方法一:

现将Type为2的Name的Type值都改为2

UPDATE Sum_Test SET Type=2 WHERE Name IN (SELECT Name FROM Sum_Test SHERE Type=2)

然后再求和

SELECT SUM(Count) FROM Sum_Test GROUP BY Type

方法二:

select sum([count]) from
(
select [count],[Type]='2' from sum_test where [name] in (select [name] from sum_test where type=2)
UNION ALL
select [count],[Type]='1' from sum_test where [name] not in (select [name] from sum_test where type=2)
) t
group by [type]

这两种方法虽然可以得到想要的结果,但是有很大的弊端

方法三:

select (select sum([count]) from sum_test) - (select sum(t.counts) from
(select []name, sum([count]) counts from sum_test
where [name] in(select [name] from sum_test where [type] = 2)
group by [name]) t) type1, (select sum(t.counts) from
(select [name], sum([count]) counts from sum_test
where [name] in(select [name] from sum_test where [type] = 2)
group by [name]) t) type2

select * from (select name, nums from demo) pivot (sum(nums) for name in (select namefrom demo gruop by name));

你试试需要这种效果

select name,totalnum from (select name as name,sum(nums) as totalnum from demo group by name) pivot (totalnum for name in ('aa','bb','cc','dd'))

你这个就是行变列
使用case 就好了

select
sum(case when 'aa' then 值 else 0 end)aa,
...
from 表名

这样也可以得

SELECT SUM(IF(name='aa',nums,0)) as aa, SUM(IF(name='bb',nums,0)) as bb,SUM(IF(name='cc',nums,0)) as cc,SUM(IF(name='dd',nums,0)) as dd  FROM demo;