当前位置:主页>仓库管理软件> 列表

分类汇总(求助) 找微软项目管理软件

销售管理软件版1楼: 现有表table1

编号 名称 仓库 时间 数量
001 电器 一号库 2005-01-01 20
002 日用器 二号库 2005-01-03 10
003 电器 一号库 2005-02-01 20
004 日用器 二号库 2005-02-05 50

如何实现以下分类汇总统计

编号 名称 仓库 时间 数量
001 电器 一号库 2005-01-01 20
002 日用器 二号库 2005-01-03 10
一月分合计 30
累计数量 30
003 电器 一号库 2005-02-01 20
004 日用器 二号库 2005-02-05 50
二月分合计 70
累计数量 100

2楼: 没有回答,sql 高手哪里了 如服饰管理软件

3楼: SELECT * FROM table1
UNION
SELECT '''', CONVERT(CHAR(7), 时间, 120) + ''合计'', '''', NULL, SUM(数量)


FROM Tble1
GROUP BY CONVERT(CHAR(7), 时间, 120)
UNION
SELECT '''', ''累计数量'', '''', NULL, SUM(数量)
FROM Tble1

4楼: 执行
SELECT * FROM table1
UNION
SELECT '''', CONVERT(CHAR(7), 时间, 120) + ''合计'', '''', NULL, SUM(数量)
FROM Tble1
GROUP BY CONVERT(CHAR(7), 时间, 120)
UNION
SELECT '''', ''累计数量'', '''', NULL, SUM(数量)
FROM Tble1

出现
服务器: 消息 208,级别 16,状态 1,行 1
对象名 ''Tble1'' 无效。
服务器: 消息 208,级别 16,状态 1,行 1
对象名 ''Tble1'' 无效。

若Tble1改为table1
则出现
服务器: 消息 8120,级别 16,状态 1,行 1
列 ''Table1.时间'' 在选择列表中无效,因为该列既不包含在聚合函数中,也不包含在 GROUP BY 子句中。
不行啊
肯请大侠解答

5楼: SELECT * FROM table1
UNION
SELECT '''', CONVERT(CHAR(7), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(7), 时间, 120)
UNION
SELECT '''', ''累计数量'', '''', NULL, SUM(数量)


FROM table1

6楼: 谢谢xianguo:
部分功能已经实现了,但排序还是没实现,一月分合计、一月分合计,分组累计还不行啊

销售管理软件版7楼: 只显示一年的吗?

SELECT 编号, 名称, 仓库, 时间, 数量 FROM
(
SELECT 序号=CONVERT(CHAR(10), 时间, 120), 编号, 名称, 仓库, 时间, 数量 FROM table1
UNION
SELECT CONVERT(CHAR(7), 时间, 120) + ''-DD'', '''', CONVERT(CHAR(7), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(7), 时间, 120) + ''-DD'', CONVERT(CHAR(7), 时间, 120)
UNION
SELECT ''YYYY-MM-DD'', '''', ''累计数量'', '''', NULL, SUM(数量)
FROM table1
) T
ORDER BY T.序号

8楼: 运行结果

2005-01 NULL 30
2005-02 NULL 80
001 电器 一号库 2005-01-01 00:00:00.000 20
002 日用器 二号库 2005-01-03 00:00:00.000 10
003 电器 一号库 2005-02-03 00:00:00.000 30
004 日用器 二号库 2005-02-05 00:00:00.000 50


目标结果
编号 名称 仓库 时间 数量
001 电器 一号库 2005-01-01 20
002 日用器 二号库 2005-01-03 10
一月分合计 30
累计数量 30
003 电器 一号库 2005-02-01 20
004 日用器 二号库 2005-02-05 50
二月分合计 70
累计数量 100

9楼: 显示一年的

10楼: 如果还有多年的数据怎么显示?

11楼: 001 电器 一号库 2005-01-01 00:00:00.000 20
002 日用器 二号库 2005-01-03 00:00:00.000 10
2005-01 NULL 30
003 电器 一号库 2005-02-03 00:00:00.000 30
004 日用器 二号库 2005-02-05 00:00:00.000 50
2005-02 NULL 80
累计数量 NULL 110

12楼: 如果还有2004年的数据,应如何显示? 如进销存软件下载

13楼: xianguo你好:


偶是新手,有些地方不是太懂。多年的数据不知道怎么显示

销售管理软件版14楼: SELECT 编号, 名称, 仓库, 时间, 数量 FROM
(
SELECT 序号=CONVERT(CHAR(10), 时间, 120), 编号, 名称, 仓库, 时间, 数量 FROM table1
UNION
SELECT CONVERT(CHAR(7), 时间, 120) + ''-DD'', '''', CONVERT(CHAR(7), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(7), 时间, 120) + ''-DD'', CONVERT(CHAR(7), 时间, 120)
UNION
SELECT ''YYYY-MM-DD'', '''', ''累计数量'', '''', NULL, SUM(数量)
FROM table1
) T
ORDER BY T.序号

15楼: 我的意思是要不要加上 "年小计"?

SELECT 编号, 名称, 仓库, 时间, 数量 FROM
(
SELECT 序号=CONVERT(CHAR(10), 时间, 120), 编号, 名称, 仓库, 时间, 数量 FROM table1
UNION
--月小计
SELECT CONVERT(CHAR(7), 时间, 120) + ''-DD'', '''', CONVERT(CHAR(7), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(7), 时间, 120) + ''-DD'', CONVERT(CHAR(7), 时间, 120)
UNION
--年小计
SELECT CONVERT(CHAR(4), 时间, 120) + ''-MM-DD'', '''', CONVERT(CHAR(4), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(4), 时间, 120) + ''-MM-DD'', CONVERT(CHAR(4), 时间, 120)
UNION
--合计
SELECT ''YYYY-MM-DD'', '''', ''合计'', '''', NULL, SUM(数量)
FROM table1
) T
ORDER BY T.序号

16楼: xianguo
数量每个月都累计

005 电器 一号库 2004-12-05 10
2004-12 10
累计数量 10
001 电器 一号库 2005-01-01 20
002 日用器 二号库 2005-01-03 10
2005-01 30
累计数量 40
003 电器 一号库 2005-02-03 30
004 日用器 二号库 2005-02-05 50
2005-02 80
累计数量 120
006 电器 一号库 2005-03-06 20
2005-03 20
累计数量 140

17楼: 加上年小计 可以啊,谢谢你xianguo,让我学到了很多

18楼: 偶想加上第次分组的累计数量,这样看起来比较明细

19楼: SELECT 编号, 名称, 仓库, 时间, 数量 FROM


(
SELECT 序号=CONVERT(CHAR(10), 时间, 120), 编号, 名称, 仓库, 时间, 数量 FROM table1
UNION
--月小计
SELECT CONVERT(CHAR(7), 时间, 120) + ''-DD'', '''', CONVERT(CHAR(7), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(7), 时间, 120) + ''-DD'', CONVERT(CHAR(7), 时间, 120)
UNION
--分组累计
SELECT CONVERT(CHAR(7), T.TA, 120) + ''-XX'', '''', ''累计'', NULL, T.TB
FROM (SELECT DATEADD(mm, -1, A.时间) TA, SUM(B.数量) TB FROM table1 A, table1 B
WHERE B.时间 GROUP BY DATEADD(mm, -1, A.时间)
) T
UNION
--年小计
SELECT CONVERT(CHAR(4), 时间, 120) + ''-MM-DD'', '''', CONVERT(CHAR(4), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(4), 时间, 120) + ''-MM-DD'', CONVERT(CHAR(4), 时间, 120)
UNION
--合计
SELECT ''YYYY-MM-DD'', '''', ''合计'', '''', NULL, SUM(数量)
FROM table1
) T
ORDER BY T.序号

20楼: 完全是意楼上的,让我学了不少东西

销售管理软件版21楼: xianguo
执行
SELECT 编号, 名称, 仓库, 时间, 数量 FROM
(
SELECT 序号=CONVERT(CHAR(10), 时间, 120), 编号, 名称, 仓库, 时间, 数量 FROM table1
UNION
--月小计
SELECT CONVERT(CHAR(7), 时间, 120) + ''-DD'', '''', CONVERT(CHAR(7), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(7), 时间, 120) + ''-DD'', CONVERT(CHAR(7), 时间, 120)
UNION
--分组累计
SELECT CONVERT(CHAR(7), T.TA, 120) + ''-XX'', '''', ''累计'', NULL, T.TB
FROM (SELECT DATEADD(mm, -1, A.时间) TA, SUM(B.数量) TB FROM table1 A, table1 B
WHERE B.时间 GROUP BY DATEADD(mm, -1, A.时间)
) T
UNION
--年小计
SELECT CONVERT(CHAR(4), 时间, 120) + ''-MM-DD'', '''', CONVERT(CHAR(4), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(4), 时间, 120) + ''-MM-DD'', CONVERT(CHAR(4), 时间, 120)
UNION
--合计
SELECT ''YYYY-MM-DD'', '''', ''合计'', '''', NULL, SUM(数量)
FROM table1
) T
ORDER BY T.序号

则出现
服务器: 消息 8157,级别 16,状态 1,行 1
包含 UNION 运算符的查询表达式中的所有查询都必须在选择列表中包含同样数目的表达式。


改为
SELECT 编号, 名称, 仓库, 时间, 数量 FROM
(
SELECT 序号=CONVERT(CHAR(10), 时间, 120), 编号, 名称, 仓库, 时间, 数量 FROM table1
UNION
--月小计
SELECT CONVERT(CHAR(7), 时间, 120) + ''-DD'', '''', CONVERT(CHAR(7), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(7), 时间, 120) + ''-DD'', CONVERT(CHAR(7), 时间, 120)
UNION
--分组累计
SELECT CONVERT(CHAR(7), T.TA, 120) + ''-XX'', '''', ''累计'', NULL,NULL,T.TB
FROM (SELECT DATEADD(mm, -1, A.时间) TA, SUM(B.数量) TB FROM table1 A, table1 B
WHERE B.时间 GROUP BY DATEADD(mm, -1, A.时间)
) T
UNION
--年小计
SELECT CONVERT(CHAR(4), 时间, 120) + ''-MM-DD'', '''', CONVERT(CHAR(4), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(4), 时间, 120) + ''-MM-DD'', CONVERT(CHAR(4), 时间, 120)


UNION
--合计
SELECT ''YYYY-MM-DD'', '''', ''合计'', '''', NULL, SUM(数量)
FROM table1
) T
ORDER BY T.序号


执行结果
累计 NULL NULL 20
累计 NULL NULL 30
001 电器 一号库 2005-01-01 00:00:00.000 20
002 日用器 二号库 2005-01-03 00:00:00.000 10
008 日器 二号库 2005-01-08 00:00:00.000 50
2005-01 NULL 80
累计 NULL NULL 80
累计 NULL NULL 110
003 电器 一号库 2005-02-03 00:00:00.000 30
004 日用器 二号库 2005-02-05 00:00:00.000 50
2005-02 NULL 80
累计 NULL NULL 160
006 电器 一号库 2005-03-06 00:00:00.000 20
2005-03 NULL 20

2005 NULL 180
合计 NULL 180

22楼: 累计多出了两行! 不知道是什么原因 如微软项目管理软件

23楼: 将年小计去掉

24楼: 还是不行,偶是说的最上面的两行
执行结果
累计 NULL NULL 20
累计 NULL NULL 30
这两行

25楼: 你要理解里内的方法不是问别人答案

26楼: 给个列子你看,希望对你有帮助!
Item Color Quantity
-------------------- -------------------- --------------------------
Table Blue 124
Table Red 223
Chair Blue 101
Chair Red 210
下列查询将生成小计报表:


SELECT CASE WHEN (GROUPING(Item) = 1) THEN ''ALL''
ELSE ISNULL(Item, ''UNKNOWN'')
END AS Item,
CASE WHEN (GROUPING(Color) = 1) THEN ''ALL''
ELSE ISNULL(Color, ''UNKNOWN'')
END AS Color,
SUM(Quantity) AS QtySum
FROM Inventory
GROUP BY Item, Color WITH ROLLUP
结果为:
Item Color QtySum
-------------------- -------------------- --------------------------
Chair Blue 101.00
Chair Red 210.00
Chair ALL 311.00
Table Blue 124.00
Table Red 223.00
Table ALL 347.00
ALL ALL 658.00

27楼: to:chichunhua
这个偶在其它网站看过,好象不行

销售管理软件版28楼: 你这个好象是按名称和仓库汇总吧。如果是这样的话


SELECT 名称,仓库 ,SUM(数量)GROUP BY 名称,仓库 ORDER BY 名称,仓库

29楼: 可以考虑用 compute by 子句

30楼: SELECT 编号, 名称, 仓库, 时间, 数量 FROM
(
SELECT 序号=CONVERT(CHAR(10), 时间, 120), 编号, 名称, 仓库, 时间, 数量 FROM table1
UNION
--月小计
SELECT CONVERT(CHAR(7), 时间, 120) + ''-DD'', '''', CONVERT(CHAR(7), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(7), 时间, 120) + ''-DD'', CONVERT(CHAR(7), 时间, 120)
UNION
--分组累计
SELECT CONVERT(CHAR(7), T.TA, 120) + ''-XX'', '''', ''累计量'', NULL,NULL,sum(t.tb) From

--select t.ta ,sum(t.tb) from
(
select convert(char(7),时间,120) as ta ,sum(数量) as tb
from table1
Group by convert(char(7), 时间,120)
) as t,
(
select convert(char(7),时间,120) as ta ,sum(数量) as tb
from table1
Group by convert(char(7), 时间,120)
) as b
where t.tagroup by t.ta

UNION
--年小计
SELECT CONVERT(CHAR(4), 时间, 120) + ''-MM-DD'', '''', CONVERT(CHAR(4), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(4), 时间, 120) + ''-MM-DD'', CONVERT(CHAR(4), 时间, 120)
UNION
--合计
SELECT ''YYYY-MM-DD'', '''', ''累计'', '''', NULL, SUM(数量)
FROM table1
) T
ORDER BY T.序号

31楼: 你可以把年统计去掉,我也是看了以后改的.

发现自己水平很低,还得向大家学习!!

谢谢xianguo
以后多向你请教!!

32楼: SELECT 编号, 名称, 仓库, 时间, 数量 FROM
(
SELECT 序号=CONVERT(CHAR(10), 时间, 120), 编号, 名称, 仓库, 时间, 数量 FROM table1
UNION
--月小计
SELECT CONVERT(CHAR(7), 时间, 120) + ''-DD'', '''', CONVERT(CHAR(7), 时间, 120), '''', NULL, SUM(数量)
FROM table1
GROUP BY CONVERT(CHAR(7), 时间, 120) + ''-DD'', CONVERT(CHAR(7), 时间, 120)
UNION
--分组累计
SELECT CONVERT(CHAR(7), b.ta, 120) + ''-XX'', '''', ''累计量'', NULL,NULL,sum(t.tb) From

--select t.ta ,sum(t.tb) from
(
select convert(char(7),DATEADD(mm, -1, 时间),120) as ta ,sum(数量) as tb
from table1
Group by convert(char(7),DATEADD(mm, -1, 时间),120)
) as t,
(
select convert(char(7),DATEADD(mm, -1, 时间),120) as ta ,sum(数量) as tb
from table1
Group by convert(char(7),DATEADD(mm, -1, 时间),120)
) as b
where t.tagroup by b.ta


UNION
--年小计
--SELECT CONVERT(CHAR(4), 时间, 120) + ''-MM-DD'', '''', CONVERT(CHAR(4), 时间, 120), '''', NULL, SUM(数量)
-- FROM table1
-- GROUP BY CONVERT(CHAR(4), 时间, 120) + ''-MM-DD'', CONVERT(CHAR(4), 时间, 120)
--UNION
--合计
SELECT ''YYYY-MM-DD'', '''', ''累计'', '''', NULL, SUM(数量)
FROM table1
) T
ORDER BY T.序号



刚才错了,这回测试能过...

对不起了..

33楼: 不错的方法,把各个部分分别取出来,然后再按时间排序,就出来需要的结果了。这样可以解决很多问题!~~谢谢