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

关于sum的一些有关问题

2013-01-01 
关于sum的一些问题各位大侠,我刚接触数据库没多久,只是菜鸟级别的,最近在做数据库的时候遇到了问题,希望各

关于sum的一些问题
各位大侠,我刚接触数据库没多久,只是菜鸟级别的,最近在做数据库的时候遇到了问题,希望各位大侠帮我解决一下。

具体问题如下:现有这样的数据表
CLIENT_NAME   ITEM_CODE   QTY   AMT
AAAA           S           1     10
BBBB           C           2     30
CCCC           M           1     10
               S           1     40
               C           1     50

要把上表变成下面的这种形式。

CLIENT_NAME   ITEM_CODE   QTY   AMT
AAAA           S           1     10
总计                       1     10
BBBB           C           2     30
总计                       2     30
CCCC           M           1     10
               S           1     40
               C           1     50
总计                       3     100

对每个client_name 下的,qty, amt 求和,然后在每一个client_name最后一行显示出来。

希望各位大侠 多指教啊!



[解决办法]
使用union 操作符 ,
UNION 操作符用于合并两个或多个 SELECT 语句的结果集,
  但UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。 

[解决办法]
没有看明白你写的,好像是算个小计吧。 不过如果一步实现不了,可以采用临时表的方式。
[解决办法]



DECLARE @tb table
(
  client_name varchar(10),
  item_code varchar(10),
  qty int,
  amt int
);

INSERT INTO @tb
  SELECT 'AAAA','S',1,10
  UNION
  SELECT 'BBBB','C',2,30
  UNION
  SELECT 'CCCC','M',1,10
  UNION
  SELECT 'CCCC','S',1,40
  UNION
  SELECT 'CCCC','C',1,50
  
;WITH c1 AS
(
SELECT t.client_name, 
ISNULL(t.item_code,'总计') item_code, 


SUM(t.qty) qty,
 SUM(t.amt) amt
FROM @tb t
GROUP BY  t.item_code,t.client_name WITH CUBE
)
SELECT *
FROM c1
WHERE client_name IS NOT NULL

--执行结果:
--AAAAS110
--AAAA总计110
--BBBBC230
--BBBB总计230
--CCCCC150
--CCCCM110
--CCCCS140
--CCCC总计3100



好像跟最终结果稍微有点出入……麻烦!

[解决办法]
if object_id('[tb]') is not null drop table [tb]
go
--CLIENT_NAME ITEM_CODE QTY AMT
create table [tb]([CLIENT_NAME ] varchar(3),[ITEM_CODE] varchar(3),[QTY] int,[AMT] int)
insert [tb]
select 'AAA','S',1,10
union
select 'BBB','C',2,30
union
select 'CCC','M',1,10
union
select 'CCC','S',1,40
union
select 'CCC','C',1,50
go

select CLIENT_NAME,ITEM_CODE,sum(QTY) QTY,sum(AMT) AMT
from tb
group by CLIENT_NAME, ITEM_CODE with rollup
having CLIENT_NAME is not null

[解决办法]
借用一下楼上的造数语句:
DECLARE @tb table
 (
   client_name varchar(10),
   item_code varchar(10),
   qty int,
   amt int
 );
 
 INSERT INTO @tb
   SELECT 'AAAA','S',1,10
   UNION
   SELECT 'BBBB','C',2,30
   UNION
   SELECT 'CCCC','M',1,10
   UNION
   SELECT 'CCCC','S',1,40
   UNION
   SELECT 'CCCC','C',1,50
   SELECT * FROM 
   (
   SELECT * FROM @tb
   UNION ALL 
   SELECT client_name,'总计',SUM(qty) qty,SUM(amt) amt
   FROM @tb
   GROUP BY client_name
   ) a
   ORDER BY a.client_name,a.item_code
   /*
   
 (5 行受影响)
 client_name item_code  qty         amt
 ----------- ---------- ----------- -----------
 AAAA        S          1           10
 AAAA        总计         1           10
 BBBB        C          2           30
 BBBB        总计         2           30
 CCCC        C          1           50
 CCCC        M          1           10
 CCCC        S          1           40


 CCCC        总计         3           100
 
 (8 行受影响)
 
 
   */
  


[解决办法]
呵呵,改一下,显示看来就符合要求了吧:


DECLARE @tb table
 (
   client_name varchar(10),
   item_code varchar(10),
   qty int,
   amt int
 );
 
INSERT INTO @tb
   SELECT 'AAAA','S',1,10
   UNION
   SELECT 'BBBB','C',2,30
   UNION
   SELECT 'CCCC','M',1,10
   UNION
   SELECT 'CCCC','S',1,40
   UNION
   SELECT 'CCCC','C',1,50
;
SELECT * into @tb2 FROM 
   (
   SELECT * FROM @tb
   UNION ALL 
   SELECT client_name,'总计',SUM(qty) qty,SUM(amt) amt
   FROM @tb
   GROUP BY client_name
   ) a
   ORDER BY a.client_name,a.item_code

Update @tb2 Set client_name="总计",item_code="" Where item_code="总计";

Select * from @tb2;
   /*
 client_name item_code  qty         amt
 ----------- ---------- ----------- -----------
 AAAA        S          1           10
 总计                     1           10
 BBBB        C          2           30
 总计                     2           30
 CCCC        C          1           50
 CCCC        M          1           10
 CCCC        S          1           40
 总计                    3           100
   */

[解决办法]
哎,跟大牛学习。成为大牛。
[解决办法]
引用:
SQL code

if object_id('[tb]') is not null drop table [tb]
go
--CLIENT_NAME ITEM_CODE QTY AMT
create table [tb]([CLIENT_NAME ] varchar(3),[ITEM_CODE] varchar(3),[QTY] int,[AMT] int)


insert [tb]
……



四楼的您好,这个应该不行吧! with cube 就会把 ITEM_CODE 分组的也相加,例子中的第二第五行都是C, 
会把他们同组相加的.没别的意思,就是我开始也是想到这种方法!共同学习

热点排行
Bad Request.