表1:产品资料表产品编号 产品名称 销售价格 销售提成
001 AA 100 1
002 BB 100 2
003 CC 123 3
004 DD 345 4
005 EE 435 5-----------------------------------------------表2:员工销售表
单据号 销售时间 产品编号 销售数量 销售员工编号
XS001 2009-11-7 17:07:00 001 1 YG001
XS002 2009-11-8 12:07:00 002 2 YG001
XS003 2009-11-9 19:07:00 001 1 YG002
XS004 2009-11-10 14:07:00 004 1 YG003
XS005 2009-11-11 18:07:00 001 3 YG001-----------------------------------------------
现在希望通过查询得到的结果是:只查询员工编号为YG001的员工销售的记录,没有销售的产品也显示出来,销售数量显示为0产品编号 产品名称 销售价格 销售提成 合计销售数量
001 AA 100 1 4
002 BB 100 2 2
003 CC 123 3 0
004 DD 345 4 0
005 EE 435 5 0
001 AA 100 1
002 BB 100 2
003 CC 123 3
004 DD 345 4
005 EE 435 5-----------------------------------------------表2:员工销售表
单据号 销售时间 产品编号 销售数量 销售员工编号
XS001 2009-11-7 17:07:00 001 1 YG001
XS002 2009-11-8 12:07:00 002 2 YG001
XS003 2009-11-9 19:07:00 001 1 YG002
XS004 2009-11-10 14:07:00 004 1 YG003
XS005 2009-11-11 18:07:00 001 3 YG001-----------------------------------------------
现在希望通过查询得到的结果是:只查询员工编号为YG001的员工销售的记录,没有销售的产品也显示出来,销售数量显示为0产品编号 产品名称 销售价格 销售提成 合计销售数量
001 AA 100 1 4
002 BB 100 2 2
003 CC 123 3 0
004 DD 345 4 0
005 EE 435 5 0
额 我用了 LEFT JOIN , 但结果只显示跟销售表相关的结果类似这样
001 AA 100 1 4
002 BB 100 2 2 刚才忘了粘贴
a.*,isnull(b.num,0) as 合计销售数量
from
a
left join
(select 单据号,count(1) as num from b group by 单据号)b
on
a.单据号=b.单据号
if object_id('[ta]') is not null drop table [ta]
go
create table [ta]([产品编号] varchar(3),[产品名称] varchar(2),[销售价格] int,[销售提成] int)
insert [ta]
select '001','AA',100,1 union all
select '002','BB',100,2 union all
select '003','CC',123,3 union all
select '004','DD',345,4 union all
select '005','EE',435,5
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([单据号] varchar(5),[销售时间] datetime,[产品编号] varchar(3),[销售数量] int,[销售员工编号] varchar(5))
insert [tb]
select 'XS001','2009-11-7 17:07:00','001',1,'YG001' union all
select 'XS002','2009-11-8 12:07:00','002',2,'YG001' union all
select 'XS003','2009-11-9 19:07:00','001',1,'YG002' union all
select 'XS004','2009-11-10 14:07:00','004',1,'YG003' union all
select 'XS005','2009-11-11 18:07:00','001',3,'YG001'
---查询---
select ta.*,isnull(tb.销售数量,0) as 合计销售数量
from ta
left join
(select 产品编号,sum(销售数量) as 销售数量,销售员工编号 from tb where 销售员工编号='YG001' group by 产品编号,销售员工编号) tb
on ta.产品编号=tb.产品编号 ---结果---
产品编号 产品名称 销售价格 销售提成 合计销售数量
---- ---- ----------- ----------- -----------
001 AA 100 1 4
002 BB 100 2 2
003 CC 123 3 0
004 DD 345 4 0
005 EE 435 5 0(所影响的行数为 5 行)
----------------------------------------------------------------
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-12-11 12:06:54
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go
create table [a]([产品编号] varchar(3),[产品名称] varchar(2),[销售价格] int,[销售提成] int)
insert [a]
select '001','AA',100,1 union all
select '002','BB',100,2 union all
select '003','CC',123,3 union all
select '004','DD',345,4 union all
select '005','EE',435,5
--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go
create table [b]([单据号] varchar(5),[销售时间] datetime,[产品编号] varchar(3),[销售数量] int,[销售员工编号] varchar(5))
insert [b]
select 'XS001','2009-11-7 17:07:00','001',1,'YG001' union all
select 'XS002','2009-11-8 12:07:00','002',2,'YG001' union all
select 'XS003','2009-11-9 19:07:00','001',1,'YG002' union all
select 'XS004','2009-11-10 14:07:00','004',1,'YG003' union all
select 'XS005','2009-11-11 18:07:00','001',3,'YG001'
--------------开始查询--------------------------
select
a.*,isnull(b.num,0) as 合计销售数量
from
a
left join
(select 产品编号,count(1) as num from b group by 产品编号)b
on
a.产品编号=b.产品编号
----------------结果----------------------------
/* 产品编号 产品名称 销售价格 销售提成 合计销售数量
---- ---- ----------- ----------- -----------
001 AA 100 1 3
002 BB 100 2 1
003 CC 123 3 0
004 DD 345 4 1
005 EE 435 5 0(5 行受影响)
*/
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-12-11 12:06:54
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[a]
if object_id('[a]') is not null drop table [a]
go
create table [a]([产品编号] varchar(3),[产品名称] varchar(2),[销售价格] int,[销售提成] int)
insert [a]
select '001','AA',100,1 union all
select '002','BB',100,2 union all
select '003','CC',123,3 union all
select '004','DD',345,4 union all
select '005','EE',435,5
--> 测试数据:[b]
if object_id('[b]') is not null drop table [b]
go
create table [b]([单据号] varchar(5),[销售时间] datetime,[产品编号] varchar(3),[销售数量] int,[销售员工编号] varchar(5))
insert [b]
select 'XS001','2009-11-7 17:07:00','001',1,'YG001' union all
select 'XS002','2009-11-8 12:07:00','002',2,'YG001' union all
select 'XS003','2009-11-9 19:07:00','001',1,'YG002' union all
select 'XS004','2009-11-10 14:07:00','004',1,'YG003' union all
select 'XS005','2009-11-11 18:07:00','001',3,'YG001'
--------------开始查询--------------------------
select
a.*,isnull(b.num,0) as 合计销售数量
from
a
left join
(select 产品编号,sum(销售数量) as num from b where 销售员工编号='YG001' group by 产品编号)b
on
a.产品编号=b.产品编号
----------------结果----------------------------
/* 产品编号 产品名称 销售价格 销售提成 合计销售数量
---- ---- ----------- ----------- -----------
001 AA 100 1 4
002 BB 100 2 2
003 CC 123 3 0
004 DD 345 4 0
005 EE 435 5 0(5 行受影响)
*/