idx 类别 数量 金额
----------- -------------------------------------------------- -----------
1 asp 1
1 asp 15
3 php 1 8
4 sql 1 22 有这样的一个表我怎么样用SQL命令才能合并成下面这样呢
idx 类别 数量 金额
----------- -------------------------------------------------- -----------
1 asp 1 15
2 php 1 8
3 sql 1 22 有劳高手赐教,谢谢。
----------- -------------------------------------------------- -----------
1 asp 1
1 asp 15
3 php 1 8
4 sql 1 22 有这样的一个表我怎么样用SQL命令才能合并成下面这样呢
idx 类别 数量 金额
----------- -------------------------------------------------- -----------
1 asp 1 15
2 php 1 8
3 sql 1 22 有劳高手赐教,谢谢。
MAX(金额) AS 金额
FROM tb_name
GROUP BY idx;
MAX(金额) AS 金额
FROM tb_name
GROUP BY idx,类别;
--> 生成测试数据: #T
IF OBJECT_ID('tempdb.dbo.#T') IS NOT NULL DROP TABLE #T
CREATE TABLE #T (idx INT,类别 VARCHAR(3),数量 INT,金额 INT)
INSERT INTO #T
SELECT '1','asp','1',null UNION ALL
SELECT '1','asp',null,'15' UNION ALL
SELECT '3','php','1','8' UNION ALL
SELECT '4','sql','1','22'--SQL查询如下:SELECT idx,类别,MAX(数量) AS 数量,
MAX(金额) AS 金额
FROM #T
GROUP BY idx,类别;/*
idx 类别 数量 金额
----------- ---- ----------- -----------
1 asp 1 15
3 php 1 8
4 sql 1 22(3 行受影响)
*/
2 asp 1
3 asp 15
4 php 1 8
5 sql 1 22
----------- -------------------------------------------------- -----------
1 asp 1
1 asp 15
3 php 1 8
4 sql 1 22
IF OBJECT_ID('tempdb.dbo.#T') IS NOT NULL DROP TABLE #T
CREATE TABLE #T (idx INT,类别 VARCHAR(3),数量 INT,金额 INT)
INSERT INTO #T
SELECT '1','asp','1',null UNION ALL
SELECT '1','asp',null,'15' UNION ALL
SELECT '3','php','1','8' UNION ALL
SELECT '4','sql','1','22'
Select idx ,类别,SUM(ISNULL(数量,0))数量,SUM(ISNULL(金额,0))金额 From #T
Group By idx ,类别
这个样不行?
ACCESS中,你把ISNULL替换成IIF和ISNULL,因为ISNULL在ACCESS中只有一个参数!
用别名改为
SELECT idx,类别,MAX(数量) AS 数量2,
MAX(金额) AS 金额2
FROM #T
GROUP BY idx,类别;Access别名与列名不可重名
sum(iif(isnull(数量)=0,数量,0)) 数量2
Select idx,类别,sum(iif(isnull(数量)=0,数量,0)) as 数量2,sum(iif(isnull(金额)=0,金额,0)) as 金额2 From 表名 Group By idx ,类别出来的是这样的:idx 类别 数量 金额
----------- -------------------------------------------------- -----------
1 asp 1 0
1 asp 0 15
3 php 1 8
4 sql 1 22
----------- -------------------------------------------------- -----------
1 asp 1 15
2 php 1 8
3 sql 1 22
FROM table1
group by table1.idx,table1.类别;试了一下,应该可以,但IDX没重排!
1 asp 1
2 asp 15
3 php 1 8
4 sql 1 22
----------- -------------------------------------------------- -----------
1 asp 1
1 asp 15
3 php 1 8
4 sql 1 22
1 asp 1 15
3 php 1 8
4 sql 1 22
SELECT min(aaa.idx),min(aaa.类别), sum(aaa.数量), sum(aaa.金额) FROM aaa group by aaa.idx,aaa.类别
其中aaa是表名