求汇总统计一SQL语句。。。。。。。。

Snoworld 2009-07-11 05:28:21
 日期 姓名 件数

2009-07-01 小A 50
2009-07-01 小B 60
2009-07-01 小C 45
2009-07-02 小A 62
2009-07-02 小B 55
2009-07-02 小C 42
2009-07-03 小A 38
2009-07-03 小B 46
2009-07-03 小C 57


--------------------------------------
日期 小A 小B 小C 总计

2009-07-01 50 60 45 155
2009-07-02 62 55 42 159
2009-07-03 38 46 57 141

表结构为上面的内容,如何查询出下面的结果。。。
...全文
92 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zl3450341 2009-07-14
  • 打赏
  • 举报
回复
学习
feixianxxx 2009-07-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hank212 的回复:]
我的数据库是ACCESS的,
如何把上面SQL的改为ACCESS类型的。。。
[/Quote]
3楼的ACCESS应该可以的
Snoworld 2009-07-14
  • 打赏
  • 举报
回复
知道答案了,
用IIF代替CASE WHEN
谢谢大家。。。
Snoworld 2009-07-14
  • 打赏
  • 举报
回复
我的数据库是ACCESS的,
如何把上面SQL的改为ACCESS类型的。。。
opf110 2009-07-11
  • 打赏
  • 举报
回复
x学习
guguda2008 2009-07-11
  • 打赏
  • 举报
回复
学习
不知道pivot 和拼SQL哪个效率高。谁有大数据量的库测一下
ChinaJiaBing 2009-07-11
  • 打赏
  • 举报
回复


declare @tb table (日期 datetime ,姓名 nvarchar(10),件数 int)
insert into @tb select '2009-07-01','小A',50
union all select '2009-07-01','小B',60
union all select '2009-07-01','小C',45
union all select '2009-07-02','小A',62
union all select '2009-07-02','小B',55
union all select '2009-07-02','小C',42
union all select '2009-07-03','小A',38
union all select '2009-07-03','小B',46
union all select '2009-07-03','小C',57
select a.* ,b.件数 as 总件数
from (select * from @tb a pivot ( sum(件数) for 姓名 in (小A,小B,小C)) b) a
join (select 日期,SUM(件数)件数 from @tb group by 日期) b
on a.日期=b.日期





(9 行受影响)
日期 小A 小B 小C 总件数
----------------------- ----------- ----------- ----------- -----------
2009-07-01 00:00:00.000 50 60 45 155
2009-07-02 00:00:00.000 62 55 42 159
2009-07-03 00:00:00.000 38 46 57 141

(3 行受影响)


feixianxxx 2009-07-11
  • 打赏
  • 举报
回复
-- =========================================
-- -----------t_mac 小编-------------
---希望有天成为大虾----
-- =========================================

If object_id('ta') is not null
Drop table ta
Go
Create table ta(日期 smalldatetime,姓名 nvarchar(2),件数 int)
Go
Insert into ta
select '2009-07-01','小A',50 union all
select '2009-07-01','小B',60 union all
select '2009-07-01','小C',45 union all
select '2009-07-02','小A',62 union all
select '2009-07-02','小B',55 union all
select '2009-07-02','小C',42 union all
select '2009-07-03','小A',38 union all
select '2009-07-03','小B',46 union all
select '2009-07-03','小C',57
Go
select 日期,
小A=SUM(case when 姓名='小A' then 件数 else 0 end),
小B=SUM(case when 姓名='小B' then 件数 else 0 end),
小C=SUM(case when 姓名='小C' then 件数 else 0 end),
总计=SUM(isnull(件数,0))
from ta
group by 日期
/*------------

(9 行受影响)
日期 小A 小B 小C 总计
----------------------- ----------- ----------- ----------- -----------
2009-07-01 00:00:00 50 60 45 155
2009-07-02 00:00:00 62 55 42 159
2009-07-03 00:00:00 38 46 57 141

(3 行受影响)

-------*/
-狙击手- 2009-07-11
  • 打赏
  • 举报
回复
------------------------------------
-- Author:happyflystone
-- Version:V1.001
-- Date:2009-07-11 17:29:18
------------------------------------

-- Test Data: ta
If object_id('ta') is not null
Drop table ta
Go
Create table ta(日期 smalldatetime,姓名 nvarchar(2),件数 int)
Go
Insert into ta
select '2009-07-01','小A',50 union all
select '2009-07-01','小B',60 union all
select '2009-07-01','小C',45 union all
select '2009-07-02','小A',62 union all
select '2009-07-02','小B',55 union all
select '2009-07-02','小C',42 union all
select '2009-07-03','小A',38 union all
select '2009-07-03','小B',46 union all
select '2009-07-03','小C',57
Go
--Start
declare @s varchar(2000)
select @s = isnull(@s+',','')+'['+姓名+']=max(case when 姓名 = '''+姓名+''' then 件数 else 0 end)'
from (select distinct 姓名 from ta) a
exec('select 日期,'+@s+',sum(件数) 总计 from ta group by 日期')


--Result:
/*

日期 小A 小B 小C 总计
------------------------------------------------------ ----------- ----------- ----------- -----------
2009-07-01 00:00:00 50 60 45 155
2009-07-02 00:00:00 62 55 42 159
2009-07-03 00:00:00 38 46 57 141
*/
--End
-狙击手- 2009-07-11
  • 打赏
  • 举报
回复
行列互换,查精华

34,590

社区成员

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

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