求sql查询语句解决方法
求sql查询语句
表如下:
区域 类型 金额 日期
华北 买 3500 2013.3.25
西北 卖 2500 2013.3.24
东北 买 1200 2013.3.25
华北 卖 2000 2013.3.23
东北 卖 200 2013.3.25
华北 买 10000 2013.3.29
按地区进行分类汇总,统计买和卖的次数
结果:
区域 金额 买的次数 卖的次数
华北 (3500+2000+10000) 3 0
东北 (1200+200) 1 1
西北 2500 0 1
求大侠们指教。
------解决方案--------------------
------解决方案--------------------
表如下:
区域 类型 金额 日期
华北 买 3500 2013.3.25
西北 卖 2500 2013.3.24
东北 买 1200 2013.3.25
华北 卖 2000 2013.3.23
东北 卖 200 2013.3.25
华北 买 10000 2013.3.29
按地区进行分类汇总,统计买和卖的次数
结果:
区域 金额 买的次数 卖的次数
华北 (3500+2000+10000) 3 0
东北 (1200+200) 1 1
西北 2500 0 1
求大侠们指教。
------解决方案--------------------
----------------------------------------------------------------
-- Author :DBA_HuangZJ(发粪涂墙)
-- Date :2014-04-24 08:19:43
-- Version:
-- Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64)
-- Apr 2 2010 15:48:46
-- Copyright (c) Microsoft Corporation
-- Enterprise Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)
--
----------------------------------------------------------------
--> 测试数据@a
declare @a table([区域] nvarchar(4),[类型] nvarchar(2),[金额] int,[日期] datetime)
insert @a
select N'华北',N'买',3500,'2013.3.25' union all
select N'西北',N'卖',2500,'2013.3.24' union all
select N'东北',N'买',1200,'2013.3.25' union all
select N'华北',N'卖',2000,'2013.3.23' union all
select N'东北',N'卖',200,'2013.3.25' union all
select N'华北',N'买',10000,'2013.3.29'
--------------生成数据--------------------------
select [区域],SUM([金额])[金额],count(CASE WHEN [类型]=N'买' THEN 1 ELSE NULL END )'买的次数',
count(CASE WHEN [类型]=N'卖' THEN 1 ELSE NULL END )'卖的次数'
from @a
GROUP BY [区域]
----------------结果----------------------------
/*
区域 金额 买的次数 卖的次数
---- ----------- ----------- -----------
东北 1400 1 1
华北 15500 2 1
西北 2500 0 1
*/
------解决方案--------------------
WITH CTE(Area,TYPE,Amt,Date)
AS (
SELECT N'华北', N'买', 3500, '2013.3.25' UNION ALL
SELECT N'西北', N'卖', 2500, '2013.3.24' UNION ALL
SELECT N'东北', N'买', 1200, '2013.3.25' UNION ALL
SELECT N'华北', N'卖', 2000 , '2013.3.23' UNION ALL
SELECT N'东北', N'卖', 200 , '2013.3.25' UNION ALL
SELECT N'华北', N'买', 10000, '2013.3.29'
)
SELECT Area
,SUM(Amt) AS SumAmt
,SUM(CASE WHEN TYPE=N'买' THEN 1 ELSE 0 END) AS PutQty
,SUM(CASE WHEN TYPE=N'卖' THEN 1 ELSE 0 END) AS OutQty
FROM CTE
GROUP BY Area