当前位置: 代码迷 >> Sql Server >> 如其显示分类合计
  详细解决方案

如其显示分类合计

热度:15   发布时间:2016-04-25 01:18:55.0
如果显示分类合计?
现有表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 行受影响)  */
  相关解决方案