根据月份查询商品当月总金额?

lyplong 2010-03-07 02:14:12
select * from Order_table
select * from OrderFu_table

select '产品名'=product_name,'总金额'=product_sumprice from OrderFu_table where id in(select dinid from Order_table)


结果
--------------------
id mf_Name customer_name dinid dinData
1 海尔 a 1 1
4 海尔 a 3 1
5 海尔 a 4 2

id product_name product_price product_num product_sumprice
1 海尔冰箱 2000 5 10000
3 海尔电视 1000 4 4000
4 海尔电脑 3000 5 15000


产品名 总金额
海尔冰箱 50000
海尔电视 4000
海尔电脑 15000



------------------------------------------------------
我想实现下面的功能:

产品名 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月
海尔冰箱 50000 ............
海尔电视 4000
海尔电脑 15000

...全文
126 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
winner2050 2010-03-07
  • 打赏
  • 举报
回复
引用 5 楼 wuyq11 的回复:
select month(时间字段),sum(数量) 数量,sum(总额) 总额
from tb
group by month(时间字段)
order by month(时间字段)


还少了gourp by 年份
mail_ylei 2010-03-07
  • 打赏
  • 举报
回复
SQL77 介绍点关于SQL有关的书籍 让我们也好找到方向啊
itliyi 2010-03-07
  • 打赏
  • 举报
回复
引用 4 楼 sql77 的回复:
SQL code----------------------------------------------------------------
-- Author :SQL77(只为思齐老)
-- Date :2010-03-07 14:28:35
-- Version:
-- Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
-- Aug 6 2000 00:57:48
-- Copyright (c) 1988-2000 Microsoft Corporation
-- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:#tb1ifobject_id('tempdb.dbo.#tb1')isnotnulldroptable #tb1gocreatetable #tb1([id]int,[mf_Name]varchar(4),[customer_name]varchar(1),[dinid]int,[dinData]int)insert #tb1select1,'海尔','a',1,1unionallselect4,'海尔','a',3,1unionallselect5,'海尔','a',4,2--> 测试数据:#TB2ifobject_id('tempdb.dbo.#TB2')isnotnulldroptable #TB2gocreatetable #TB2([id]int,[product_name]varchar(8),[product_price]int,[product_num]int,[product_sumprice]int)insert #TB2select1,'海尔冰箱',2000,5,10000unionallselect3,'海尔电视',1000,4,4000unionallselect4,'海尔电脑',3000,5,15000--------------开始查询--------------------------DECLARE@SVARCHAR(8000)SELECT@S=ISNULL(@S+',','')+'SUM(CASE WHEN dinData='+LTRIM(NUMBER)+' THEN product_sumprice ELSE 0 END)AS'''+LTRIM(NUMBER)+''''FROM MASTER..SPT_VALUES MLEFTJOIN #TB1 T1ON T1.dinid=M.NUMBERLEFTJOIN #TB2 T2ON T1.dinid=T2.IDWHERE M.NUMBERBETWEEN1AND12AND M.TYPE='P'EXEC('SELECT T2.product_name,'+@S+'
FROM #TB1 T1,#TB2 T2 WHERE T1.dinid=T2.ID GROUP BY T2.product_name')----------------结果----------------------------
/*


(所影响的行数为 3 行)


(所影响的行数为 3 行)

product_name 1 2 3 4 5 6 7 8 9 10 11 12
------------ ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
海尔冰箱 10000 0 0 0 0 0 0 0 0 0 0 0
海尔电脑 0 15000 0 0 0 0 0 0 0 0 0 0
海尔电视 4000 0 0 0 0 0 0 0 0 0 0 0*/
学习的
itliyi 2010-03-07
  • 打赏
  • 举报
回复
引用 2 楼 sql77 的回复:
引用 1 楼 zengzhan 的回复:
sql77  上!
晕,你咋知道我来呀?
程序员鼓励师 2010-03-07
  • 打赏
  • 举报
回复
wuyq11 2010-03-07
  • 打赏
  • 举报
回复
select month(时间字段),sum(数量) 数量,sum(总额) 总额
from tb
group by month(时间字段)
order by month(时间字段)
SQL77 2010-03-07
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :SQL77(只为思齐老)
-- Date :2010-03-07 14:28:35
-- Version:
-- Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
-- Aug 6 2000 00:57:48
-- Copyright (c) 1988-2000 Microsoft Corporation
-- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:#tb1
if object_id('tempdb.dbo.#tb1') is not null drop table #tb1
go
create table #tb1([id] int,[mf_Name] varchar(4),[customer_name] varchar(1),[dinid] int,[dinData] int)
insert #tb1
select 1,'海尔','a',1,1 union all
select 4,'海尔','a',3,1 union all
select 5,'海尔','a',4,2
--> 测试数据:#TB2
if object_id('tempdb.dbo.#TB2') is not null drop table #TB2
go
create table #TB2([id] int,[product_name] varchar(8),[product_price] int,[product_num] int,[product_sumprice] int)
insert #TB2
select 1,'海尔冰箱',2000,5,10000 union all
select 3,'海尔电视',1000,4,4000 union all
select 4,'海尔电脑',3000,5,15000
--------------开始查询--------------------------
DECLARE @S VARCHAR(8000)
SELECT @S=ISNULL(@S+',','')+
'SUM(CASE WHEN dinData='+LTRIM(NUMBER)+' THEN product_sumprice ELSE 0 END)AS '''+LTRIM(NUMBER)+''''
FROM MASTER..SPT_VALUES M
LEFT JOIN #TB1 T1 ON T1.dinid=M.NUMBER
LEFT JOIN #TB2 T2 ON T1.dinid=T2.ID
WHERE M.NUMBER BETWEEN 1 AND 12 AND M.TYPE='P'

EXEC('SELECT T2.product_name,'+@S+'
FROM #TB1 T1,#TB2 T2 WHERE T1.dinid=T2.ID GROUP BY T2.product_name')




----------------结果----------------------------
/*


(所影响的行数为 3 行)


(所影响的行数为 3 行)

product_name 1 2 3 4 5 6 7 8 9 10 11 12
------------ ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
海尔冰箱 10000 0 0 0 0 0 0 0 0 0 0 0
海尔电脑 0 15000 0 0 0 0 0 0 0 0 0 0
海尔电视 4000 0 0 0 0 0 0 0 0 0 0 0


*/
SQL77 2010-03-07
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :SQL77(只为思齐老)
-- Date :2010-03-07 14:28:35
-- Version:
-- Microsoft SQL Server 2000 - 8.00.194 (Intel X86)
-- Aug 6 2000 00:57:48
-- Copyright (c) 1988-2000 Microsoft Corporation
-- Desktop Engine on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:#tb1
if object_id('tempdb.dbo.#tb1') is not null drop table #tb1
go
create table #tb1([id] int,[mf_Name] varchar(4),[customer_name] varchar(1),[dinid] int,[dinData] int)
insert #tb1
select 1,'海尔','a',1,1 union all
select 4,'海尔','a',3,1 union all
select 5,'海尔','a',4,2
--> 测试数据:#TB2
if object_id('tempdb.dbo.#TB2') is not null drop table #TB2
go
create table #TB2([id] int,[product_name] varchar(8),[product_price] int,[product_num] int,[product_sumprice] int)
insert #TB2
select 1,'海尔冰箱',2000,5,10000 union all
select 3,'海尔电视',1000,4,4000 union all
select 4,'海尔电脑',3000,5,15000
--------------开始查询--------------------------
DECLARE @S VARCHAR(8000)
SELECT @S=ISNULL(@S+',','')+
'SUM(CASE WHEN dinid='+LTRIM(NUMBER)+' THEN product_sumprice ELSE 0 END)AS '''+LTRIM(NUMBER)+''''
FROM MASTER..SPT_VALUES M
LEFT JOIN #TB1 T1 ON T1.dinid=M.NUMBER
LEFT JOIN #TB2 T2 ON T1.dinid=T2.ID
WHERE M.NUMBER BETWEEN 1 AND 12 AND M.TYPE='P'

EXEC('SELECT T2.product_name,'+@S+'
FROM #TB1 T1,#TB2 T2 WHERE T1.dinid=T2.ID GROUP BY T2.product_name')




----------------结果----------------------------
/*

(所影响的行数为 3 行)


(所影响的行数为 3 行)

product_name 1 2 3 4 5 6 7 8 9 10 11 12
------------ ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
海尔冰箱 10000 0 0 0 0 0 0 0 0 0 0 0
海尔电脑 0 0 0 15000 0 0 0 0 0 0 0 0
海尔电视 0 0 4000 0 0 0 0 0 0 0 0 0


*/
SQL77 2010-03-07
  • 打赏
  • 举报
回复
引用 1 楼 zengzhan 的回复:
sql77  上!

晕,你咋知道我来呀?
qqzeng-ip 2010-03-07
  • 打赏
  • 举报
回复
sql77 上!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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