sql单表查询如何实现

bestpsk 2014-07-15 02:44:41
姓名 消费时间 现金 银行卡
张三 2013-1-1 400 50
李四 2013-5-8 900 1522
张三 2014-3-9 333 555
李四 2014-6-15 444 777
我要求出用SQL查询:
姓名 2013年业绩 2014年业绩
张三 2013年的现金+银行卡 2014年的现金+银行卡
李四 2013年的现金+银行卡 2014年的现金+银行卡
..... 2013年的现金+银行卡 2014年的现金+银行卡
...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-07-15
  • 打赏
  • 举报
回复
下次把问题说清楚了,还好改动不大
發糞塗牆 2014-07-15
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(發糞塗牆)
-- Date    :2014-07-15 16:11:45
-- Version:
--      Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
--	May 14 2014 18:34:29 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[消费明细表]
if object_id('[消费明细表]') is not null drop table [消费明细表]
go 
create table [消费明细表]([顾客姓名] varchar(5),[消费时间] datetime,[现金] int,[银行卡] int,[服务人编号] int)
insert [消费明细表]
select '顾客A','2013-1-1',500,1000,1 union all
select '顾客A','2014-5-1',500,1000,1 union all
select '顾客B','2013-2-1',500,1000,2 union all
select '顾客B','2014-6-1',500,1000,2
--> 测试数据:[员工信息表]
if object_id('[员工信息表]') is not null drop table [员工信息表]
go 
create table [员工信息表]([姓名] varchar(4),[编号] int,[性别] varchar(2))
insert [员工信息表]
select '张三',1,'女' union all
select '李四',2,'男'
--------------开始查询--------------------------



select b.[姓名],MAX(CASE WHEN [消费时间] BETWEEN '2013-01-01' AND '2013-12-31' THEN [现金]+[银行卡] ELSE 0 END)AS '2013年业绩', 
MAX(CASE WHEN [消费时间] BETWEEN '2014-01-01' AND '2014-12-31' THEN [现金]+[银行卡] ELSE 0 END)AS '2014年业绩'
from [消费明细表] a INNER JOIN [员工信息表] b ON a.服务人编号=b.编号
GROUP BY b.[姓名]
----------------结果----------------------------
/* 
姓名   2013年业绩     2014年业绩
---- ----------- -----------
李四   1500        1500
张三   1500        1500
*/
bestpsk 2014-07-15
  • 打赏
  • 举报
回复
员工信息表 姓名 编号 性别 张三 1 女 李四 2 男 消费明细表 顾客姓名 消费时间 现金 银行卡 服务人编号 顾客A 2013-1-1 500 1000 1 顾客A 2014-5-1 500 1000 1 顾客B 2013-2-1 500 1000 2 顾客B 2014-6-1 500 1000 2 我要求出用SQL查询: 姓名 2013年业绩 2014年业绩 张三 2013年的现金+银行卡 2014年的现金+银行卡 李四 2013年的现金+银行卡 2014年的现金+银行卡 ..... 2013年的现金+银行卡 2014年的现金+银行卡
發糞塗牆 2014-07-15
  • 打赏
  • 举报
回复
你这个应该没必要做动态了,一般不用查几十年的数据,写死就够了
發糞塗牆 2014-07-15
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author  :DBA_HuangZJ(發糞塗牆)
-- Date    :2014-07-15 14:45:32
-- Version:
--      Microsoft SQL Server 2012 - 11.0.5058.0 (X64) 
--	May 14 2014 18:34:29 
--	Copyright (c) Microsoft Corporation
--	Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([姓名] varchar(4),[消费时间] datetime,[现金] int,[银行卡] int)
insert [huang]
select '张三','2013-1-1',400,50 union all
select '李四','2013-5-8',900,1522 union all
select '张三','2014-3-9',333,555 union all
select '李四','2014-6-15',444,777
--------------开始查询--------------------------

select [姓名],MAX(CASE WHEN [消费时间] BETWEEN '2013-01-01' AND '2013-12-31' THEN [现金]+[银行卡] ELSE 0 END)AS '2013年业绩', 
MAX(CASE WHEN [消费时间] BETWEEN '2014-01-01' AND '2014-12-31' THEN [现金]+[银行卡] ELSE 0 END)AS '2014年业绩'
from [huang]
GROUP BY [姓名]
----------------结果----------------------------
/* 
姓名   2013年业绩     2014年业绩
---- ----------- -----------
李四   2422        1221
张三   450         888
*/

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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