读书人

急求一sql语句结果

发布时间: 2012-12-30 10:43:15 作者: rapoo

急求一sql语句,在线等结果
表table1
code detp zu
28新客户邀约部一组
29新客户邀约部二组
30新客户邀约部三组
31新客户邀约部五组
32新客户邀约部六组
33新客户邀约部八组
34新客户邀约部九组
35新客户邀约部十二组
36新客户邀约部十六组
37新客户邀约部十八组

表table2
codeid amount createtime
28102012-10-01
28102012-10-02
2822012-10-03
281232012-10-04

table1和table2中code和codeid为关联字段
根据table2中createtime字段转换成列统计显示每天amount数量,并统计每行、每列的合计
要求显示出来结果格式为:

detp zu 1日 2日 3日 4日 5日 6日 7日 8日 9日 10日 ...... 合计
新客户邀约部 一组 10 10 2 123 145
新客户邀约部 二组
新客户邀约部 三组
新客户邀约部 五组
新客户邀约部 六组
新客户邀约部 九组
新客户邀约部 十二组
新客户邀约部 十六组


新客户邀约部 十八组
合计 10 10 2 123
[解决办法]



with tb
as(
select a.*,b.amount,b.createtime
from table1 a,table2 b where a.code=b.codeid
)


那个连接你会了吧 在那个结果上
select
detp,
zu ,
[1日]=sum(case when day(createtime)= 1 then amount else 0 end),
[2日]=sum(case when day(createtime)= 2 then amount else 0 end),
[3日]=sum(case when day(createtime)= 3 then amount else 0 end),
[4日]=sum(case when day(createtime)= 4 then amount else 0 end),
[5日]=sum(case when day(createtime)= 5 then amount else 0 end)
......
from
tb
group by
detp,
zu

[解决办法]
好事..
等等你送上的..

USE test
go

---->生成表table1
--
--if object_id('table1') is not null
--drop table table1
--Go
--Create table table1([code] smallint,[detp] nvarchar(6),[zu] nvarchar(3))
--Insert into table1
--Select 28,N'新客户邀约部',N'一组'
--Union all Select 29,N'新客户邀约部',N'二组'
--Union all Select 30,N'新客户邀约部',N'三组'
--Union all Select 31,N'新客户邀约部',N'五组'
--Union all Select 32,N'新客户邀约部',N'六组'
--Union all Select 33,N'新客户邀约部',N'八组'
--Union all Select 34,N'新客户邀约部',N'九组'
--Union all Select 35,N'新客户邀约部',N'十二组'
--Union all Select 36,N'新客户邀约部',N'十六组'
--Union all Select 37,N'新客户邀约部',N'十八组'
--
---->生成表table2
--
--if object_id('table2') is not null
--drop table table2
--Go
--Create table table2([codeid] smallint,[amount] smallint,[createtime] datetime)
--Insert into table2
--Select 28,10,'2012-10-01'
--Union all Select 28,10,'2012-10-02'
--Union all Select 28,2,'2012-10-03'
--Union all Select 28,123,'2012-10-04'


DECLARE @date DATETIME

SET @date='2012-10-01' -- 要算的月份的第一天

;WITH cte_Date AS(
SELECT
DATEADD(dd,number,@date) AS Date
FROM master..spt_values
WHERE type='p'
AND number<=DATEDIFF(dd,@date,DATEADD(mm,1,@date))
)
,cte_Model AS(
SELECT
b.code
,b.detp
,b.zu
,LTRIM(DAY(a.Date))+'日' AS Col
,ISNULL(SUM(c.amount),'') AS amount
FROM cte_Date AS a
FULL JOIN table1 AS b ON 1=1
LEFT JOIN table2 AS c ON a.Date=c.createtime And b.code=c.codeid


GROUP BY
a.Date
,b.code
,b.detp
,b.zu
UNION ALL
SELECT
a.code
,a.detp
,a.zu
,N'合计'
,ISNULL(SUM(b.amount),0)
FROM table1 AS a
LEFT JOIN table2 AS b ON a.code=b.codeid
GROUP BY
a.code
,a.detp
,a.zu
)
,cte_Result AS (
SELECT
code
,detp
,zu
,[1日],[2日],[3日],[4日],[5日],[6日],[7日],[8日],[9日],[10日],[11日],[12日],[13日],[14日],[15日],[16日],[17日],[18日],[19日],[20日],[21日],[22日],[23日],[24日],[25日],[26日],[27日],[28日],[29日],[30日],[合计]
FROM cte_Model AS a
PIVOT (
SUM(amount) FOR Col IN([1日],[2日],[3日],[4日],[5日],[6日],[7日],[8日],[9日],[10日],[11日],[12日],[13日],[14日],[15日],[16日],[17日],[18日],[19日],[20日],[21日],[22日],[23日],[24日],[25日],[26日],[27日],[28日],[29日],[30日],[合计])
) AS p
)
select * From cte_Result
Union all
select
N''
,N''
,N'合计'
,Sum([1日]) AS [1日]
,Sum([2日]) AS [2日]
,Sum([3日]) AS [3日]
,Sum([4日]) AS [4日]
,Sum([5日]) AS [5日]
,Sum([6日]) AS [6日]
,Sum([7日]) AS [7日]
,Sum([8日]) AS [8日]
,Sum([9日]) AS [9日]
,Sum([10日]) AS [10日]
,Sum([11日]) AS [11日]
,Sum([12日]) AS [12日]
,Sum([13日]) AS [13日]
,Sum([14日]) AS [14日]
,Sum([15日]) AS [15日]
,Sum([16日]) AS [16日]
,Sum([17日]) AS [17日]
,Sum([18日]) AS [18日]
,Sum([19日]) AS [19日]
,Sum([20日]) AS [20日]
,Sum([21日]) AS [21日]
,Sum([22日]) AS [22日]
,Sum([23日]) AS [23日]
,Sum([24日]) AS [24日]
,Sum([25日]) AS [25日]
,Sum([26日]) AS [26日]
,Sum([27日]) AS [27日]
,Sum([28日]) AS [28日]
,Sum([29日]) AS [29日]
,Sum([30日]) AS [30日]
,Sum([合计]) AS [合计]
FROM cte_Result

/*
code detp zu 1日 2日 3日 4日 5日 6日 7日 8日 9日 10日 11日 12日 13日 14日 15日 16日 17日 18日 19日 20日 21日 22日 23日 24日 25日 26日 27日 28日 29日 30日 合计


------ ------ ---- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- ----------- -----------
28 新客户邀约部 一组 10 10 2 123 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 145
29 新客户邀约部 二组 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


30 新客户邀约部 三组 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
31 新客户邀约部 五组 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


32 新客户邀约部 六组 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
33 新客户邀约部 八组 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


34 新客户邀约部 九组 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
35 新客户邀约部 十二组 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


36 新客户邀约部 十六组 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
37 新客户邀约部 十八组 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


0 合计 10 10 2 123 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 145
*/

Go

读书人网 >SQL Server

热点推荐