日期:2014-05-16  浏览次数:20547 次

求SQL查询语句。
数据库表结构如下:

 客户名  类型 排名 进货额 出货额
  张三   进   1    1322     1000
  李四   进   2     1111    2
  赵武   进   3     200    37
  王二   出   1     1      3000
  张三   出   2     1322     1000
  刘九   出   3     11     600

以上为客户的进货表,按照每个客户进货和出货的额度进行了排名。 例如张三既是进货的第一名,也是出货的第2名。
需要对表中所有客户的进货额和出货额进行加总。由于张三重复,怎么才能去掉重复的张三这行呢。
要实现的结果:

  进货总额                     出货总额
 1322+1111+200+1+11            1000+2+37+3000+600

请指教。
------解决方案--------------------
----------------------------------------------------------------
-- Author  :DBA_Huangzj(發糞塗牆)
-- Date    :2014-02-19 08:48:11
-- Version:
--      Microsoft SQL Server 2012 (SP1) - 11.0.3128.0 (X64) 
-- Dec 28 2012 20:23:12 
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: )
--
----------------------------------------------------------------
--> 测试数据:[huang]
if object_id('[huang]') is not null drop table [huang]
go 
create table [huang]([日期] datetime,[客户名] varchar(4),[类型] varchar(2),[排名] int,[进货额] int,[出货额] int)
insert [huang]
select '20140208','张三','进',1,1322,1000 union all
select '20140208','李四','进',2,1111,2 union all
select '20140208','赵武','进',3,200,37 union all
select '20140208','王二','出',1,1,3000 union all
select '20140208','张三','出',2,1322,1000 union all
select '20140208','刘九','出',3,11,600
--------------开始查询--------------------------
SELECT *
FROM (
 select [日期],[类型],SUM( [进货额] )[进货总额],SUM( [出货额] )[出货总额]
FROM huang
WHERE [类型]='进'
GROUP BY [日期],[类型]
UNION ALL 
 select [日期],[类型],SUM( [进货额] )[进货总额],SUM( [出货额] )[出货总额]
FROM huang
WHERE [类型]='出'
GROUP BY [日期],[类型]
UNION ALL 
SELECT [日期],'全' [类型],SUM([进货额]),SUM([出货额])
FROM (SELECT DISTINCT [日期],[进货额],[出货额] FROM  [huang])a
GROUP BY [日期])a
ORDER BY [日期],CASE 类型 WHEN '进' THEN 1 WHEN '出' THEN 2 ELSE 3 END 
----------------结果----------------------------
/* 
日期                      类型   进货总额        出货总额
----------------------- ---- ----------- -----------
2014-02-08 00:00:00.000 进    2633     &n