首页 新闻 会员 周边

有意思的SQL查询

0
悬赏园豆:50 [已解决问题] 解决于 2012-12-17 18:05

表结构如上,希望高手指导下,本人不胜感激!

一只小青蛙的主页 一只小青蛙 | 初学一级 | 园豆:3
提问于:2012-10-23 16:07
< >
分享
最佳答案
2

select T1.a,d,e from (
SELECT a,sum(c) as d FROM TABLE
where b=0
GROUP BY a) as T1
inner join
(SELECT a,sum(c) as e FROM TABLE
where b=1
GROUP BY a) as T2 on T1.a=T2.a

收获园豆:20
念念啊 | 菜鸟二级 |园豆:415 | 2012-10-23 16:38

帮忙测试下我的代码对不

┢┦偉 | 园豆:1240 (小虾三级) | 2012-10-23 17:31

经测试 对的

旺仔小小小馒头 | 园豆:196 (初学一级) | 2012-10-23 18:06
其他回答(7)
0

楼上的语句是ok的 思路也很清晰的说,我搞了半天也搞出来的,但是语句还是比较渣,楼主用楼上的吧

PS:最后一行bumen得该成a  ==> on T1.a=T2.a

收获园豆:5
oppoic | 园豆:770 (小虾三级) | 2012-10-23 16:50

呵呵,我写了后改字段名字没有改完,结合你的,O(∩_∩)O~

支持(0) 反对(0) 念念啊 | 园豆:415 (菜鸟二级) | 2012-10-23 16:55
0

select

a,

case b when  0  then  c end as 经理人数,

case b when  1 then c end as 员工人数

from table

order by a

 

不知道可以不  目前手头没工具,所以没测试

收获园豆:5
┢┦偉 | 园豆:1240 (小虾三级) | 2012-10-23 17:24

写错了  把order by  改成group by

支持(0) 反对(0) ┢┦偉 | 园豆:1240 (小虾三级) | 2012-10-23 17:25

@┢┦偉: 你这个不行,group by一列,结果查三列 肯定不行

按你这个思路写 还得连接本身再查一次,更麻烦,还是上面的答案比较好,

支持(0) 反对(0) oppoic | 园豆:770 (小虾三级) | 2012-10-24 08:48
0

SELECT temp1.a,经理人数,普通员工人数 from
(SELECT a,c AS 经理人数 from TABLE
WHERE B=0) as temp1
inner join
(SELECT a,c AS 普通员工人数 from TABLE
WHERE B=1) as temp2
on temp1.a=temp2.a

收获园豆:5
阿朱姐姐 | 园豆:122 (初学一级) | 2012-10-23 19:02

可以查出结果,但是仅能查楼主要求的这个,随便再增加几列,你的语句就不行了

支持(0) 反对(0) oppoic | 园豆:770 (小虾三级) | 2012-10-24 09:18
0

select

a,

case b when  0  then  c end as 经理人数,

case b when  1 then c end as 员工人数

from table

groupby a

感觉这种比较清晰明了点

收获园豆:5
AntColony | 园豆:215 (菜鸟二级) | 2012-10-23 19:06

清晰倒是清晰,但是查不出楼主要的结果

这语句查的结果:

A    5    NULL
B    6    NULL
A    NULL    5
B    NULL    6

支持(0) 反对(0) oppoic | 园豆:770 (小虾三级) | 2012-10-24 09:11

@心态要好: 呵呵  手头没工具  原来写过这种语句

支持(0) 反对(0) ┢┦偉 | 园豆:1240 (小虾三级) | 2012-10-24 12:46

@心态要好: 

支持(0) 反对(0) AntColony | 园豆:215 (菜鸟二级) | 2012-10-24 13:06

@壹卄の➹: 回复怎么插入图片?
我点插入图片那个按钮,出来只能链接网上的图片啊,无法本地上传

支持(0) 反对(0) oppoic | 园豆:770 (小虾三级) | 2012-10-24 15:13

@心态要好: 

支持(0) 反对(0) AntColony | 园豆:215 (菜鸟二级) | 2012-10-24 15:25
0

楼上的做个分组汇总应该就可以了。

select  AA.a,SUM(ISNULL(经理人数,0)) 经理人数, SUM(ISNULL(员工人数,0)) 员工人数

from (

select

a,

case b when  0  then  c end as 经理人数,

case b when  1 then c end as 员工人数

from table

group by a)  AA

group by AA.a

行专列问题还可以使用 PIVOT

CREATE TABLE #table ( a VARCHAR(10), b INT, c INT )

INSERT  INTO #table ( a, b, C )
        SELECT  'A', 0, 5
        UNION
        SELECT  'B', 0, 6
        UNION
        SELECT  'A', 1, 5
        UNION
        SELECT  'B', 1, 6


SELECT  A, [0] 员工人数, [1] 经理人数
FROM    ( SELECT a, c, b FROM #table
        ) AS SourceTable PIVOT
( SUM(c) FOR b IN ( [0], [1] ) ) AS PivotTable


DROP TABLE #table

参考

http://msdn.microsoft.com/zh-cn/library/ms177410%28v=SQL.90%29.aspx

收获园豆:5
acepro | 园豆:1218 (小虾三级) | 2012-10-24 10:00
0

嗯,下面这个写法好

select a,
       sum(case b when 0 than c end) as d,
       sum(case b when 1 than c end) as e
       from table
      group by a

收获园豆:5
文和-Mignet | 园豆:212 (菜鸟二级) | 2012-10-26 15:11
0

来晚了....

只会造轮子 | 园豆:2274 (老鸟四级) | 2012-10-26 15:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册