Help!各位大俠,關于SQL查詢專業性的問題.....多多指教,在線送分!

statelyhorse 2003-09-13 11:25:04
本人初來窄道,不知用SQL語句,怎樣分月份查詢一個表里的總金額,好像要用GROUP BY命令,請高手詳細解答,在下感激不盡.(例表),求里面7,8,9月份sum(單价)是多少,
目前我用dbchart做圖表

ID 產品 單价 數量 日期

1 西裝 100.00 20 2003-07-01
2 西褲 200.00 100 2003-08-05
3 時裝 100.00 200 2003-09-05
4 西裝 200.00 100 2003-07-09
5 西褲 300.00 200 2003-08-02
.. ... ..... .. ...........
.. ... ..... .. . .........
...全文
17 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
statelyhorse 2003-09-13
  • 打赏
  • 举报
回复
各位大俠,感謝你們的熱情幫助,我先試一下.完了立即送分.


祝:好人一生都有好運!
benxie 2003-09-13
  • 打赏
  • 举报
回复
用 GROUP BY 分组多行
GROUP BY 子句用来为结果集中的每一行产生聚合值。如果聚合函数没有使用 GROUP BY 子句,则只为 SELECT 语句报告一个聚合值。

以下示例返回分类 2 中每种产品已销售的单位数量:

USE Northwind
SELECT OrdD.ProductID AS ProdID,
SUM(OrdD.Quantity) AS AmountSold
FROM [Order Details] AS OrdD JOIN Products as Prd
ON OrdD.ProductID = Prd.ProductID
AND Prd.CategoryID = 2
GROUP BY OrdD.ProductID

下面是结果集:

ProdID AmountSold
----------- -----------
3 328
4 453
5 298
6 301
8 372
15 122
44 601
61 603
63 445
65 745
66 239
77 791

(12 row(s) affected)

GROUP BY 关键字后面跟着列的列表,称为分组列。GROUP BY 子句限制结果集中的行;对于分组列中的每个非重复值只有一行。每个结果集行都包含与其分组列中特定值相关的汇总数据。

当 SELECT 语句中包含 GROUP BY 关键字时,对可以在选择列表中指定的项有一些限制。在该选择列表中所允许的项目是:

分组列。


为分组列中的每个值只返回一个值的表达式,例如将列名作为其中一个参数的聚合函数。这些函数称为矢量聚合。
例如,TableX 包含:

ColumnA ColumnB ColumnC
------- ------- -------
1 abc 5
1 def 4
1 ghi 9
2 jkl 8
2 mno 3



如果 ColumnA 是分组列,则结果集中将有两行,其中一行汇总值 1 的信息,而另一行汇总值 2 的信息。

如果 ColumnA 是分组列,要引用 ColumnB 或 ColumnC,这两列必须能为 ColumnA 中的每个值返回单个值的聚合函数中的参数。选择列表中包含诸如 MAX (ColumnB)、SUM (ColumnC) 或 AVG (ColumnC) 之类的表达式是合法的:

SELECT ColumnA,
MAX(ColumnB) AS MaxB,
SUM(ColumnC) AS SumC
FROM TableX
GROUP BY ColumnA

该选择语句返回两行,为 ColumnA 中的每个唯一值各返回一行:

ColumnA MaxB SumC
----------- ---- -----------
1 ghi 18
2 mno 11

(2 row(s) affected)

但是,选择列表中只包含 ColumnB 表达式是不合法的:

SELECT ColumnA,
ColumnB,
SUM(ColumnC) AS SumC
FROM TableX
GROUP BY ColumnA

由于 GROUP BY 关键字只能返回一行,该行 ColumnA 中的值为 1,因此无法返回与 ColumnA 中的值 1 关联的 ColumnB 的三个值(abc、def 和 ghi)。

不能对 ntext、text、image 或 bit 列使用 GROUP BY 或 HAVING 子句,除非它们所在的函数返回的值具有其它数据类型。这样的函数包括 SUBSTRING 和 CAST。



  • 打赏
  • 举报
回复
我先试试:
select sum(單价),month(日期) as 月份 from 表名 order by 月份

我也是新手,不知对不对,对的话给点分,不对就是我献丑了,哈哈
zjcxc 元老 2003-09-13
  • 打赏
  • 举报
回复
如果你的数据中日期不会跨年,就可以直接用下面的处理语句:
select 产品,月份=month(日期),总金额=sum(单价*数量)
from dbchart
where month(日期) in (7,8,9) --仅统计7,8,9月,如果全部统计,去掉此行.
group by 产品,month(日期)
zjcxc 元老 2003-09-13
  • 打赏
  • 举报
回复
select 产品,年月=convert(varchar(7),日期,120),总金额=sum(单价*数量)
from dbchart
where convert(varchar(7),日期,120) in ('2003-07','2003-08','2003-09')
group by 产品,convert(varchar(7),日期,120)
statelyhorse 2003-09-13
  • 打赏
  • 举报
回复
tzm21(明之)朋友:
select sum(單价),month(日期) as 月份 from 表名 order by 月份

這個句子語法是錯誤的,應該改為:

select sum(單价),month(日期) as 月份 from 表名 group by month(日期)
order by month(日期)

感謝各位朋友,可以結貼了.

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧