求一条SQL语句 有表MONEY字段 TYPE MONEY CLASS内容 付款 1000 前期收入 支出 200 付款 200 后期收入 付款 1000 后期收入如何用一条语句能算出 付款=2200元,支出-200元。前期收入1000元,后期收入1200元。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 --CREATE TABLE [MONEY] ([TYPE] VARCHAR(10), [MONEY] int , CLASS varchar(10))--INSERT INTO [MONEY]--SELECT '付款', 1000 , '前期收入'--UNION ALL SELECT '支出', 200,NULL --UNION ALL SELECT '付款', 200 , '后期收入'--UNION ALL SELECT '付款', 1000, '后期收入'SELECT SUM([付款])[付款] , SUM(支出)支出 , SUM(前期收入) 前期收入, SUM(后期收入)后期收入FROM ( SELECT '付款' = SUM(CASE WHEN [type] = '付款' THEN [money] ELSE 0 END) , '支出' = -1 * SUM(CASE WHEN [type] = '支出' THEN [money] ELSE 0 END) , '前期收入' = SUM(CASE WHEN CLASS = '前期收入' THEN [money] ELSE 0 END) , '后期收入' = SUM(CASE WHEN CLASS = '后期收入' THEN [money] ELSE 0 END) FROM [money] GROUP BY [type] ) a/*付款 支出 前期收入 后期收入----------- ----------- ----------- -----------2200 -200 1000 1200(1 行受影响)*/ 正解。如可再加上一个条件呢?WHERE CONVERT(varchar(100), DATE, 23)='" & Format(Sqlser_time, "yyyy-mm-dd") & "'" 不过你那个where是前端拼接的吧--CREATE TABLE [MONEY] ([TYPE] VARCHAR(10), [MONEY] int , CLASS varchar(10))--INSERT INTO [MONEY]--SELECT '付款', 1000 , '前期收入'--UNION ALL SELECT '支出', 200,NULL --UNION ALL SELECT '付款', 200 , '后期收入'--UNION ALL SELECT '付款', 1000, '后期收入'SELECT SUM([付款])[付款] , SUM(支出)支出 , SUM(前期收入) 前期收入, SUM(后期收入)后期收入FROM ( SELECT '付款' = SUM(CASE WHEN [type] = '付款' THEN [money] ELSE 0 END) , '支出' = -1 * SUM(CASE WHEN [type] = '支出' THEN [money] ELSE 0 END) , '前期收入' = SUM(CASE WHEN CLASS = '前期收入' THEN [money] ELSE 0 END) , '后期收入' = SUM(CASE WHEN CLASS = '后期收入' THEN [money] ELSE 0 END) FROM [money] WHERE CONVERT(varchar(100), DATE, 23)='" & Format(Sqlser_time, "yyyy-mm-dd") & "'" GROUP BY [type] ) a/*付款 支出 前期收入 后期收入----------- ----------- ----------- -----------2200 -200 1000 1200 (1 行受影响) */ 其实同理啊,加case when咯。不过你这结构有点难幻想 我思考,少要码,不然我这分都不够你用,不知道你那个押金是对应什么列,我就用个a来代替--CREATE TABLE [MONEY] ([a] VARCHAR(10),[TYPE] VARCHAR(10), [MONEY] int , CLASS varchar(10))--INSERT INTO [MONEY]--SELECT NULL ,'付款', 1000 , '前期收入'--UNION ALL SELECT '押金', '支出', 200,NULL --UNION ALL SELECT NULL , '付款', 200 , '后期收入'--UNION ALL SELECT '押金','付款', 1000, '后期收入'SELECT SUM([付款]) [付款] , SUM(支出) 支出 , SUM(前期收入) 前期收入 , SUM(后期收入) 后期收入 , SUM(支出押金) 支出押金 , SUM(收入押金) 收入押金FROM ( SELECT '付款' = SUM(CASE WHEN [type] = '付款' THEN [money] ELSE 0 END) , '支出' = -1 * SUM(CASE WHEN [type] = '支出' THEN [money] ELSE 0 END) , '前期收入' = SUM(CASE WHEN CLASS = '前期收入' THEN [money] ELSE 0 END) , '后期收入' = SUM(CASE WHEN CLASS = '后期收入' THEN [money] ELSE 0 END) , '支出押金' = SUM(CASE WHEN [type] = '支出' AND [a] = '押金' THEN [money] ELSE 0 END) , '收入押金' = SUM(CASE WHEN [type] = '付款' AND [a] = '押金' THEN [money] ELSE 0 END) FROM [money] GROUP BY [type] ) a /*付款 支出 前期收入 后期收入 支出押金 收入押金----------- ----------- ----------- ----------- ----------- -----------2200 -200 1000 1200 200 1000(1 行受影响)*/ 有表MONEY 字段 TYPE MONEY CLASS 内容 付款 1000 前期收入 支出 200 付款 200 后期收入 付款 1000 后期收入其实就是另一个字段 REMARK标注是“押金”的于算出押金的数据。 [请教]求 sql 时间查询语句 再问下有关行列转换的问题 SQLSERVER 2000每天自动更新 急:关于SQL Server的Order by问题。 SQLServer常见查询问题 急!!急!!!!数据库列的修改! 求一条查询的SQL语句 向变量赋值的 SELECT 语句不能与数据检索操作结合使用。 用SQL SERVER数据库做300W条记录,几个服务器分区做,速度会有问题吗??再用一个服务器做同步~~ 修改sa注册密码---各位大虾救命啊! update语句优化 排班表怎么设计?横向的和纵向的哪个好?
--INSERT INTO [MONEY]
--SELECT '付款', 1000 , '前期收入'
--UNION ALL SELECT '支出', 200,NULL
--UNION ALL SELECT '付款', 200 , '后期收入'
--UNION ALL SELECT '付款', 1000, '后期收入'
SELECT SUM([付款])[付款] ,
SUM(支出)支出 ,
SUM(前期收入) 前期收入,
SUM(后期收入)后期收入
FROM ( SELECT '付款' = SUM(CASE WHEN [type] = '付款' THEN [money]
ELSE 0
END) ,
'支出' = -1 * SUM(CASE WHEN [type] = '支出' THEN [money]
ELSE 0
END) ,
'前期收入' = SUM(CASE WHEN CLASS = '前期收入' THEN [money]
ELSE 0
END) ,
'后期收入' = SUM(CASE WHEN CLASS = '后期收入' THEN [money]
ELSE 0
END)
FROM [money]
GROUP BY [type]
) a
/*
付款 支出 前期收入 后期收入
----------- ----------- ----------- -----------
2200 -200 1000 1200(1 行受影响)*/
正解。如可再加上一个条件呢?
WHERE CONVERT(varchar(100), DATE, 23)='" & Format(Sqlser_time, "yyyy-mm-dd") & "'"
--INSERT INTO [MONEY]
--SELECT '付款', 1000 , '前期收入'
--UNION ALL SELECT '支出', 200,NULL
--UNION ALL SELECT '付款', 200 , '后期收入'
--UNION ALL SELECT '付款', 1000, '后期收入'
SELECT SUM([付款])[付款] ,
SUM(支出)支出 ,
SUM(前期收入) 前期收入,
SUM(后期收入)后期收入
FROM ( SELECT '付款' = SUM(CASE WHEN [type] = '付款' THEN [money]
ELSE 0
END) ,
'支出' = -1 * SUM(CASE WHEN [type] = '支出' THEN [money]
ELSE 0
END) ,
'前期收入' = SUM(CASE WHEN CLASS = '前期收入' THEN [money]
ELSE 0
END) ,
'后期收入' = SUM(CASE WHEN CLASS = '后期收入' THEN [money]
ELSE 0
END)
FROM [money]
WHERE CONVERT(varchar(100), DATE, 23)='" & Format(Sqlser_time, "yyyy-mm-dd") & "'"
GROUP BY [type]
) a
/*
付款 支出 前期收入 后期收入
----------- ----------- ----------- -----------
2200 -200 1000 1200
(1 行受影响)
*/
--INSERT INTO [MONEY]
--SELECT NULL ,'付款', 1000 , '前期收入'
--UNION ALL SELECT '押金', '支出', 200,NULL
--UNION ALL SELECT NULL , '付款', 200 , '后期收入'
--UNION ALL SELECT '押金','付款', 1000, '后期收入'SELECT SUM([付款]) [付款] ,
SUM(支出) 支出 ,
SUM(前期收入) 前期收入 ,
SUM(后期收入) 后期收入 ,
SUM(支出押金) 支出押金 ,
SUM(收入押金) 收入押金
FROM ( SELECT '付款' = SUM(CASE WHEN [type] = '付款' THEN [money]
ELSE 0
END) ,
'支出' = -1 * SUM(CASE WHEN [type] = '支出' THEN [money]
ELSE 0
END) ,
'前期收入' = SUM(CASE WHEN CLASS = '前期收入' THEN [money]
ELSE 0
END) ,
'后期收入' = SUM(CASE WHEN CLASS = '后期收入' THEN [money]
ELSE 0
END) ,
'支出押金' = SUM(CASE WHEN [type] = '支出'
AND [a] = '押金' THEN [money]
ELSE 0
END) ,
'收入押金' = SUM(CASE WHEN [type] = '付款'
AND [a] = '押金' THEN [money]
ELSE 0
END)
FROM [money]
GROUP BY [type]
) a
/*
付款 支出 前期收入 后期收入 支出押金 收入押金
----------- ----------- ----------- ----------- ----------- -----------
2200 -200 1000 1200 200 1000(1 行受影响)*/
字段 TYPE MONEY CLASS
内容 付款 1000 前期收入
支出 200
付款 200 后期收入
付款 1000 后期收入其实就是另一个字段 REMARK标注是“押金”的于算出押金的数据。