现有表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 行受影响) */