新手提问:sql语句可否自定义第一列????(VB)

来源:百度知道 编辑:UC知道 时间:2024/05/30 07:55:03
比如下表(账目),第一列的“月”有1月,2月,3,4,5,。。,缺少3月的和11月的数据
-------------------------------------
------账目
月 支出科目 金额
1-- 业务费-------100
1-- 广告费------ 100
2 --业务费------ 100
2 --广告费------ 100
4 --业务费------ 800
4 --广告费------ 200
4 --业务费------ 800
5 --广告费-- ----200
5 --广告费----- 1000
6 --广告费----- 100
7 --业务费------ 800
7 --广告费------ 200
8 --业务费----- 800
9 --广告费------ 200
9 --广告费-- --1000
10 -广告费--- 100
12 -业务费--- 800
12 -广告费-- -200
---------------------------------
select 月,sum(金额) from 账目 WHERE 支出科目 = '业务费' group by 月--------结果如下
月 业务费
1 --1720
2 --1896
4 --3134
5 --2120
6 --1406
7-- 6917
8 --4658
9 --2551
10 -5387
12 -3301 (数据是我乱填的)

--------------------------------------------
--以上语句只能求出已有的月份的“业务费”金额汇总,不过我想让第一列能不能显示所的月份呢,就是1到12 个月所有的??,没有的月分数据为0 的那种汇总,如下

月 业务费
1 --1720
2 --1896
3 -

你的问题说得通用点就是:
如何对 查询的结果附加一些数据.
如何总是 3 月份为空的可以使用 union all:

SELECT [月], SUM([金额]) FROM [账目] WHERE [支出科目]='业务费'
UNION ALL
SELECT 3,0
ORDER BY [月]

至于不是固定 3 月的, 已超出回答范围 ( :), 自动动动脑.)

-----------------------------------------------------------------
补充一下 Access 的:
可以定义一个解决方案:
新建一个表, 此表只有 月 和 业务费字段. 其中业务费字段全部预设为0.
此表共 12 条记录:
---------
月 业务费
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
10 0
11 0
12 0

此表用来补充你实际数据表中没有相应月份的记录. 表名假设为 PreDef
则按下面的查询, 就可以输出你想得到的结果:

SELECT *
FROM
(SELECT 月, 业务费 FROM 帐目 WHERE 支出科目='业务费'
UNION ALL
SELECT 月, 业务费 FROM PreDef WHERE NOT (月 IN (SELECT 月 FROM 帐目))
)
ORDER BY 月

因此, 只要建一个 12 记录的 只包含 月/业务费两字段 PreDef 表, 就此一句, 就可以了.

------------------------------
再次补充 (鉴于多字段的 Access):
其实依然是 PreDef 表