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

明细+合计 的SQL语句怎么写

2012-05-21 
明细+合计 的SQL语句如何写?下面的SQL如何实现:(原数据:)水表编号月取整金额1001001201201001011201510010

明细+合计 的SQL语句如何写?
下面的SQL如何实现:
(原数据:)
水表编号 月 取整金额
100100 1201 20
100101 1201 5
100101 1202 8
100102 1201 10
100103 1201 5
100103 1202 6
100103 1203 5

(通过用select语句变成:)
100100 1201 20
  合计 1月 20
100101 1201 5
  1202 8
  合计 2月 13
100102 1201 10
  合计 1月 10
100103 1201 5
  1202 6
  1203 5
  合计 3月 11

要用这种查询结果做到报表中。

[解决办法]

SQL code
GOIF OBJECT_ID('tb1') IS NOT null DROP TABLE tb1goCREATE TABLE tb1( 水表编号 VARCHAR(10), 月 VARCHAR(10),取整金额 int)INSERT INTO tb1 SELECT '100100', '1201', 20 UNION ALLSELECT '100101', '1201', 5 UNION ALLSELECT '100101', '1202', 8 UNION ALLSELECT '100102', '1201', 10 UNION ALLSELECT '100103', '1201', 5 UNION ALLSELECT '100103', '1202', 6 UNION ALLSELECT '100103', '1203', 5;WITH c1 AS(    SELECT 水表编号,月,取整金额 FROM tb1),c2 AS (    SELECT 合计=水表编号+N'合计:',col2=RIGHT(max_month,2)+N'月', sum_money FROM     (        SELECT 水表编号,MAX(月) AS max_month,SUM(取整金额) AS sum_money         FROM tb1         GROUP BY 水表编号    ) AS t        )SELECT * FROM (    SELECT 水表编号,月,取整金额 FROM c1     UNION ALL     SELECT 合计,col2,sum_money FROM c2) AS t ORDER BY 水表编号,月,取整金额/*水表编号          月          取整金额------------- ---------- -----------100100        1201       20100100合计:  01月       20100101        1201       5100101        1202       8100101合计:  02月       13100102        1201       10100102合计:  01月       10100103        1201       5100103        1202       6100103        1203       5100103合计:  03月       16(11 行受影响)*/
[解决办法]
SQL code
if object_id('[tb]') is not null drop table [tb]gocreate table [tb]([水表编号] int,[月] int,[取整金额] int)insert [tb]select 100100,1201,20 union allselect 100101,1201,5 union allselect 100101,1202,8 union allselect 100102,1201,10 union allselect 100103,1201,5 union allselect 100103,1202,6 union allselect 100103,1203,5goSELECT 水表编号,月,取整金额FROM(SELECT 水表编号 AS PX,CASE WHEN RN=1 THEN LTRIM(水表编号) ELSE '' END AS 水表编号,LTRIM(月)  AS 月,取整金额 FROM (SELECT *,RN=ROW_NUMBER() OVER(PARTITION BY 水表编号 ORDER BY 月) FROM TB) AUNION ALLSELECT 水表编号,'合计',LTRIM(COUNT(1))+'月',SUM(取整金额) AS 取整金额FROM TBGROUP BY 水表编号) TORDER BY PX,LEN(月) desc,月/**水表编号         月              取整金额------------ -------------- -----------100100       1201           20合计           1月             20100101       1201           5             1202           8合计           2月             13100102       1201           10合计           1月             10100103       1201           5             1202           6             1203           5合计           3月             16(11 行受影响)**/
[解决办法]
Select T.[水表编号] ,
Case When isNull(T.[月],'') = '' Then '合计' Else Cast(T.[月] As Varchar(10)) End As [月], 
T.[取整金额]
From (Select [水表编号] ,[月] ,Sum([取整金额]) [取整金额]
From @Tb
Group By [水表编号] ,[月] With Cube
) T
Where isNull([水表编号],'') <> '' Or (isNull([水表编号],'')+isNull([月],'') = '')
[解决办法]
SQL code
Declare @Tb table ([水表编号] int,[月] int,[取整金额] int)insert Into @Tbselect 100100,1201,20 union allselect 100101,1201,5 union allselect 100101,1202,8 union allselect 100102,1201,10 union allselect 100103,1201,5 union allselect 100103,1202,6 union allselect 100103,1203,5Select T.[水表编号] ,Case When isNull(T.[月],'') = '' Then '合计' Else  Cast(T.[月] As Varchar(10)) End As [月], T.[取整金额]From (Select [水表编号] ,[月] ,Sum([取整金额]) [取整金额]From @TbGroup By [水表编号] ,[月] With Cube) TWhere isNull([水表编号],'') <> '' Or (isNull([水表编号],'')+isNull([月],'') = '') 

热点排行
Bad Request.