首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sqlserver 统计报表的 sql语句如何写

2013-06-26 
sqlserver 统计报表的 sql语句怎么写表数据。khdmnamemoney儿科医院NULL12500复高公司 办公用品费66700金山

sqlserver 统计报表的 sql语句怎么写
表数据。
  khdm              name              money

儿科医院   NULL                12500
复高公司 办公用品费              66700
金山医院  办公用品费              10100
景德镇第一  办公用品费      43800
上海国际医学中心  办公用品费     36750
郑州儿医  办公用品费      50000
NULL          笔记本电脑              659800
丰城医院      笔记本电脑      196000
复高公司     笔记本电脑      2204395
景德镇第一      笔记本电脑      200000
上海儿童      笔记本电脑      400000
上海江湾       笔记本电脑      161000
万柏林笔记本电脑                     200000
崇明二院(堡镇)        餐费        26500
崇明三院(庙镇)       餐费        58000
崇明中心医院       餐费             16000
儿科医院       餐费                25800
复高公司       餐费            857310

我要 弄一个统计报表
要求展示的数据 跟下面的例子一样
 khjc      办公用品费    笔记本电脑费   (等等费用) 合计
 复高公司   66700        2204395           等等
 
求sql语句,,
sql 统计
[解决办法]


 IF OBJECT_ID('T_CSDN_ONE') IS NOT NULL
 BEGIN
    DROP TABLE dbo.T_CSDN_ONE;
 END
 GO
 CREATE TABLE T_CSDN_ONE
 (
    KHDM VARCHAR(50),
    [NAME] VARCHAR(50),
    MONERY DECIMAL(12,2)
 )
 GO
 INSERT INTO dbo.T_CSDN_ONE
 SELECT 
 '儿科医院',NULL,12500
 UNION ALL
 SELECT
 '复高公司','办公用品费',66700
 UNION ALL
 SELECT
 '金山医院','办公用品费',10100
 UNION ALL
 SELECT
 '景德镇第一','办公用品费',43800
 UNION ALL


 SELECT
 '上海国际医学中心','办公用品费',36750
 UNION ALL
 SELECT
 '郑州儿医','办公用品费',50000
 UNION ALL
 SELECT
 'NULL','笔记本电脑',659800
 UNION ALL
 SELECT
 '丰城医院','笔记本电脑',196000
 UNION ALL
 SELECT
 '复高公司','笔记本电脑',2204395
 UNION ALL
 SELECT
 '景德镇第一','笔记本电脑',200000
 UNION ALL
 SELECT
 '上海儿童','笔记本电脑',400000
 UNION ALL
 SELECT
 '上海江湾','笔记本电脑',161000
 UNION ALL
 SELECT
 '万柏林','笔记本电脑',200000
 UNION ALL
 SELECT
 '崇明二院(堡镇)','餐费',26500
 UNION ALL
 SELECT
 '崇明三院(庙镇)','餐费',58000
 UNION ALL
 SELECT
 '崇明中心医院','餐费',16000
 UNION ALL
 SELECT
 '儿科医院','餐费',25800
 UNION ALL
 SELECT
 '复高公司','餐费',857310

SELECT KHDM,
SUM(CASE [NAME] WHEN '餐费' THEN MONERY ELSE 0 END) AS CF,
SUM(CASE [NAME] WHEN '笔记本电脑' THEN MONERY ELSE 0 END) AS BJBDN,
SUM(CASE [NAME] WHEN '办公用品费' THEN MONERY ELSE 0 END) AS BGYPF
FROM dbo.T_CSDN_ONE GROUP BY KHDM


[解决办法]

--动态语句
declare @sql varchar(8000)
select @sql = isnull(@sql + '],[' , '') + NAME from T_CSDN_ONE group by NAME
set @sql = '[' + @sql + ']'
EXEC ('select * from (select * from T_CSDN_ONE) a pivot (SUM(ISNULL(MONERY,0) for NAME in (' + @sql + ')) b')


[解决办法]

create table hu
(khdm varchar(20), name varchar(20), [money] int)

insert into hu
select '儿科医院', null, 12500 union all
select '复高公司', '办公用品费', 66700 union all
select '金山医院', '办公用品费', 10100 union all
select '景德镇第一', '办公用品费', 43800 union all
select '上海国际医学中心', '办公用品费', 36750 union all
select '郑州儿医', '办公用品费', 50000 union all
select null, '笔记本电脑', 659800 union all
select '丰城医院', '笔记本电脑', 196000 union all
select '复高公司', '笔记本电脑', 2204395 union all
select '景德镇第一', '笔记本电脑', 200000 union all
select '上海儿童', '笔记本电脑', 400000 union all
select '上海江湾', '笔记本电脑', 161000 union all
select '万柏林', '笔记本电脑', 200000 union all
select '崇明二院(堡镇)', '餐费', 26500 union all
select '崇明三院(庙镇)', '餐费', 58000 union all
select '崇明中心医院', '餐费', 16000 union all
select '儿科医院', '餐费', 25800 union all
select '复高公司', '餐费', 857310


select khdm,isnull([办公用品费],0) '办公用品费',
            isnull([笔记本电脑],0) '笔记本电脑费',
            isnull([办公用品费],0)+isnull([笔记本电脑],0)+isnull([餐费],0) '合计'
 from hu a
 pivot(max([money]) for name in([办公用品费],[笔记本电脑],[餐费])) p


 
/*
khdm                 办公用品费     笔记本电脑费   合计
-------------------- ----------- ----------- -----------
NULL                  0           659800      659800
崇明二院(堡镇)         0           0           26500
崇明三院(庙镇)         0           0           58000
崇明中心医院             0           0           16000
儿科医院                 0           0           25800
丰城医院                 0           196000      196000
复高公司                 66700       2204395     3128405
金山医院                 10100       0           10100
景德镇第一               43800       200000      243800
上海儿童                 0           400000      400000
上海国际医学中心         36750       0           36750
上海江湾                 0           161000      161000
万柏林                   0           200000      200000
郑州儿医                 50000       0           50000

(14 row(s) affected)
*/

热点排行