日期:2014-05-17 浏览次数:20620 次
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 行受影响) */
------解决方案--------------------
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 行受影响)
*/