日期:2014-05-17  浏览次数:20509 次

如果显示分类合计?
现有表A(Id,名称,分类,数量 ,价格,日期)、 Id为主键;
现添加如下的值:
第一行: 1, 张三,公帐,5, 10 , 2010-3-2
第二行: 2, 张三,私帐,6, 12 , 2010-3-4
第三行: 3, 李四,公帐,7, 10 , 2010-3-2
第四行: 4, 李四,私帐,8, 15 , 2010-3-4

分类只有两种情况公帐或私帐,如何按名称来分别显示公帐和私帐价格

显示
名称 ,公帐,私帐 
 张三 , 10 12
 李四, 10, 15

请赐教!

------解决方案--------------------
SQL code
CREATE TABLE test 
 (
 Id INT IDENTITY(1,1) PRIMARY KEY,
 名称 VARCHAR(20),
 分类 VARCHAR(20),
 数量 INT ,
 价格 INT ,
 日期 DATETIME
 )
 INSERT INTO test
 SELECT '张三','公帐',5,10,'2010-3-2'
 UNION ALL 
 SELECT '张三','私帐',6,12,'2010-3-4'
 UNION ALL 
 SELECT '李四','公帐',7,10,'2010-3-2'
 UNION ALL 
 SELECT '李四','私帐',8,15,'2010-3-4'
 
 SELECT [名称],SUM([公帐]),SUM([私帐])
 FROM (
 SELECT [名称],[公帐]=CASE WHEN [分类]='公帐' THEN [价格] ELSE 0 END ,[私帐]=CASE WHEN [分类]='私帐' THEN [价格]  ELSE 0 END
  FROM test) a
  GROUP BY [名称]
  
  /*
  
  名称                               
 -------------------- ----------- -----------
 李四                   10          15
 张三                   10          12
 
 (2 行受影响)
  */

------解决方案--------------------
SQL code
CREATE TABLE test 
 (
 Id INT IDENTITY(1,1) PRIMARY KEY,
 名称 VARCHAR(20),
 分类 VARCHAR(20),
 数量 INT ,
 价格 INT ,
 日期 DATETIME
 )
 INSERT INTO test
 SELECT '张三','公帐',5,10,'2010-3-2'
 UNION ALL 
 SELECT '张三','私帐',6,12,'2010-3-4'
 UNION ALL 
 SELECT '李四','公帐',7,10,'2010-3-2'
 UNION ALL 
 SELECT '李四','私帐',8,15,'2010-3-4'
 
 SELECT [名称],SUM([公帐])[公帐],SUM([私帐])[私帐],SUM([合计])[合计]
 FROM (
 SELECT [名称],[公帐]=CASE WHEN [分类]='公帐' THEN [价格] ELSE 0 END ,[私帐]=CASE WHEN [分类]='私帐' THEN [价格]  ELSE 0 END,(CASE WHEN [分类]='公帐' THEN [价格] ELSE 0 END  +CASE WHEN [分类]='私帐' THEN [价格]  ELSE 0 END)[合计]
  FROM test) a
  GROUP BY [名称]
  
  /*
  
名称                   公帐          私帐          合计
-------------------- ----------- ----------- -----------
李四                   10          15          25
张三                   10          12          22

(2 行受影响)

  */