姓名 消费时间 现金 银行卡
张三 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年的现金+银行卡
------解决方案--------------------
----------------------------------------------------------------
-- 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
*/