id a b c sex
1 2 3 4 男
2 1 2 3 女
3 1 2 4 男
查询结果
1 9
男 16
3 7
女 6 2 6
没分了 求各位大哥帮忙
13 个解决方案
#1
说一下计算规则。
#2
我要的类似于这种效果
我现在查出来的就是
男 9 1 9
男 7 3 7
女 6 2 6
#3
你想要的结果是这样吗?
男 16 1 9
男 16 3 7
女 6 2 6
男 16 1 9
男 16 3 7
女 6 2 6
#4
3L说的这种的应该也是可以的
#5
语句:
结果:
;WITH tab1(id,a,b,c,sex)AS(
select 1,2,3,4,'男' union all
select 2,1,2,3,'女' union all
select 3,1,2,4,'男'
)
SELECT a.sex ,
( SELECT SUM(a + b + c)
FROM tab1 b
WHERE a.sex = b.sex
) AS 总量 ,
a.id ,
SUM(a.a + a.b + a.c) AS 行总量
FROM tab1 a
GROUP BY a.sex ,
a.id
ORDER BY a.sex
结果:
#6
不要在返回字段中嵌套子查询,可以汇总后和明细连接。
WITH
/* 测试数据
table1(id,a,b,c,sex) AS (
SELECT 1,2,3,4,'男' UNION ALL
SELECT 2,1,2,3,'女' UNION ALL
SELECT 3,1,2,4,'男'
),
*/
x(性别,总量) AS (
SELECT sex,
SUM(a+b+c)
FROM table1
GROUP BY sex
)
SELECT x.性别,
x.总量,
y.id,
y.a+y.b+y.c 行总量
FROM x
JOIN table1 y
ON x.性别 = y.sex
性别 总量 id 行总量
---- ----------- ----------- -----------
男 16 3 7
男 16 1 9
女 6 2 6
#7
谢谢大家,第一种我试了下.可以 但是速度太慢不知道是我数据太大还是怎么回事.第二种方法提示我性别附件语法错误,不知道怎么回事
#8
你试试这样快点么?
;WITH tab1(id,a,b,c,sex)AS(
select 1,2,3,4,'男' union all
select 2,1,2,3,'女' union all
select 3,1,2,4,'男'
)
SELECT a.sex ,
t.总量 AS 总量 ,
a.id ,
SUM(a.a + a.b + a.c) AS 行总量
FROM tab1 a
INNER JOIN ( SELECT b.sex ,
SUM(a + b + c) AS 总量
FROM tab1 b
GROUP BY b.sex
) t ON a.sex = t.sex
GROUP BY a.sex ,
t.总量 ,
a.id
ORDER BY a.sex
#9
看了6楼的,又改进点了点
;WITH tab1(id,a,b,c,sex)AS(
select 1,2,3,4,'男' union all
select 2,1,2,3,'女' union all
select 3,1,2,4,'男'
)
SELECT a.sex ,
t.总量 AS 总量 ,
a.id ,
(a.a + a.b + a.c) AS 行总量
FROM tab1 a
INNER JOIN ( SELECT b.sex ,
SUM(a + b + c) AS 总量
FROM tab1 b
GROUP BY b.sex
) t ON a.sex = t.sex
ORDER BY a.sex
#10
你漏了 WITH 关键字?
在多条语句中 WITH 前面加分号。
#11
10楼的 那个是对的 我忘记加了 9楼大哥的怎么报select附近语句错误了
#12
没有啊
#13
WITH T1(id,a,b,c,sex) AS (
SELECT 1,2,3,4,'男' UNION ALL
SELECT 2,1,2,3,'女' UNION ALL
SELECT 3,1,2,4,'男'
),T2 As
(
Select id,sex,sum(a+b+c) as c1 from T1 group by id,sex
),T3 As
(
Select sex,sum(a+b+c) as c2 from T1 group by sex
)
Select a.id,a.c1,b.c2,a.sex from T2 a join T3 b on a.sex=b.sex
#1
说一下计算规则。
#2
我要的类似于这种效果
我现在查出来的就是
男 9 1 9
男 7 3 7
女 6 2 6
#3
你想要的结果是这样吗?
男 16 1 9
男 16 3 7
女 6 2 6
男 16 1 9
男 16 3 7
女 6 2 6
#4
3L说的这种的应该也是可以的
#5
语句:
结果:
;WITH tab1(id,a,b,c,sex)AS(
select 1,2,3,4,'男' union all
select 2,1,2,3,'女' union all
select 3,1,2,4,'男'
)
SELECT a.sex ,
( SELECT SUM(a + b + c)
FROM tab1 b
WHERE a.sex = b.sex
) AS 总量 ,
a.id ,
SUM(a.a + a.b + a.c) AS 行总量
FROM tab1 a
GROUP BY a.sex ,
a.id
ORDER BY a.sex
结果:
#6
不要在返回字段中嵌套子查询,可以汇总后和明细连接。
WITH
/* 测试数据
table1(id,a,b,c,sex) AS (
SELECT 1,2,3,4,'男' UNION ALL
SELECT 2,1,2,3,'女' UNION ALL
SELECT 3,1,2,4,'男'
),
*/
x(性别,总量) AS (
SELECT sex,
SUM(a+b+c)
FROM table1
GROUP BY sex
)
SELECT x.性别,
x.总量,
y.id,
y.a+y.b+y.c 行总量
FROM x
JOIN table1 y
ON x.性别 = y.sex
性别 总量 id 行总量
---- ----------- ----------- -----------
男 16 3 7
男 16 1 9
女 6 2 6
#7
谢谢大家,第一种我试了下.可以 但是速度太慢不知道是我数据太大还是怎么回事.第二种方法提示我性别附件语法错误,不知道怎么回事
#8
你试试这样快点么?
;WITH tab1(id,a,b,c,sex)AS(
select 1,2,3,4,'男' union all
select 2,1,2,3,'女' union all
select 3,1,2,4,'男'
)
SELECT a.sex ,
t.总量 AS 总量 ,
a.id ,
SUM(a.a + a.b + a.c) AS 行总量
FROM tab1 a
INNER JOIN ( SELECT b.sex ,
SUM(a + b + c) AS 总量
FROM tab1 b
GROUP BY b.sex
) t ON a.sex = t.sex
GROUP BY a.sex ,
t.总量 ,
a.id
ORDER BY a.sex
#9
看了6楼的,又改进点了点
;WITH tab1(id,a,b,c,sex)AS(
select 1,2,3,4,'男' union all
select 2,1,2,3,'女' union all
select 3,1,2,4,'男'
)
SELECT a.sex ,
t.总量 AS 总量 ,
a.id ,
(a.a + a.b + a.c) AS 行总量
FROM tab1 a
INNER JOIN ( SELECT b.sex ,
SUM(a + b + c) AS 总量
FROM tab1 b
GROUP BY b.sex
) t ON a.sex = t.sex
ORDER BY a.sex
#10
你漏了 WITH 关键字?
在多条语句中 WITH 前面加分号。
#11
10楼的 那个是对的 我忘记加了 9楼大哥的怎么报select附近语句错误了
#12
没有啊
#13
WITH T1(id,a,b,c,sex) AS (
SELECT 1,2,3,4,'男' UNION ALL
SELECT 2,1,2,3,'女' UNION ALL
SELECT 3,1,2,4,'男'
),T2 As
(
Select id,sex,sum(a+b+c) as c1 from T1 group by id,sex
),T3 As
(
Select sex,sum(a+b+c) as c2 from T1 group by sex
)
Select a.id,a.c1,b.c2,a.sex from T2 a join T3 b on a.sex=b.sex