读书人

请教一条复杂的sql语句 答案

发布时间: 2012-10-14 14:55:08 作者: rapoo

请问一条复杂的sql语句 ,在线等答案!
收入表:
TransNoAmountCreateDate
11002012-10-02 00:00:00.000
11002012-10-02 17:41:16.723
03123122012-10-02 17:43:36.483
1231123122012-10-02 17:44:58.303
12312132312012-10-02 17:49:16.250

支出表
TransNoAmountCreateDate
11002012-10-03 00:00:00.000
011222012-10-03 09:36:54.103
03-2002012-10-03 09:40:01.557

我希望根据收入和支出表显示出:
日期 收入 支出
20120901 1000 200
20120902 1000 200

按天分别计算收入和支出总和,请问各位大拿,sql语句咋写呢?

[解决办法]

SQL code
CREATE TABLE 收入表(TransNo VARCHAR(10),    Amount INT ,    CreateDate DATETIME) INSERT INTO 收入表 SELECT '1',    100    ,'2012-10-02 00:00:00.000' UNION ALL  SELECT '1',    100    ,'2012-10-02 17:41:16.723' UNION ALL  SELECT '03',    12312    ,'2012-10-02 17:43:36.483' UNION ALL  SELECT '1231',    12312,    '2012-10-02 17:44:58.303' UNION ALL  SELECT '12312',    13231,    '2012-10-02 17:49:16.250'  CREATE TABLE 支出表(TransNo VARCHAR(10),    Amount INT ,    CreateDate DATETIME) INSERT INTO 支出表 SELECT '1',    100,'2012-10-03 00:00:00.000' UNION ALL  SELECT '01',    122,    '2012-10-03 09:36:54.103' UNION ALL  SELECT '03',    -200,    '2012-10-03 09:40:01.557'  SELECT CONVERT(DATE,createdate) createdate,ISNULL(CASE WHEN [STATUS]='in' THEN amount END,0) [收入],ISNULL(CASE WHEN [STATUS]='out' THEN amount END,0) [支出]  FROM ( SELECT TransNo,    Amount,    CreateDate,'in' [STATUS] FROM 收入表  UNION ALL  SELECT TransNo,    Amount,    CreateDate,'out' [STATUS] FROM  支出表 )a  /* createdate 收入          支出 ---------- ----------- ----------- 2012-10-02 100         0 2012-10-02 100         0 2012-10-02 12312       0 2012-10-02 12312       0 2012-10-02 13231       0 2012-10-03 0           100 2012-10-03 0           122 2012-10-03 0           -200  (8 行受影响)    */
[解决办法]
SQL code
DECLARE @income TABLE(    TransNo varchar(10),    Amount decimal,    CreateDate datetime);DECLARE @pay table(    TransNo varchar(10),    Amount decimal,    CreateDate datetime);INSERT INTO @income    SELECT '1',100, '2012-10-02 00:00:00'    UNION ALL    SELECT '1',100, '2012-10-02 17:41:36'    UNION ALL    SELECT '03',12312, '2012-10-02 17:43:36'    UNION ALL     SELECT '1231',12312, '2012-10-02 17:44:58'    UNION ALL     SELECT '12312',13231, '2012-10-02 17:49:16'INSERT INTO @pay    SELECT '1',100, '2012-10-02 00:00:00'    UNION ALL    SELECT '01',12312, '2012-10-02 17:43:36'    UNION ALL     SELECT '03', -200, '2012-10-03 17:44:58';WITH c1 AS(select SUM(Amount) as cost, convert(varchar(10), CreateDate,20) as 'CreateDate', '收入' AS [State]from @income group by convert(varchar(10), CreateDate,20)UNION ALLselect SUM(Amount) as cost, convert(varchar(10), CreateDate,20) as 'CreateDate', '支出'from @pay group by convert(varchar(10), CreateDate,20))SELECT     c1.CreateDate,    SUM(CASE WHEN c1.[state] = '收入' THEN c1.cost ELSE NULL END) '收入',    SUM(CASE WHEN c1.[state] = '支出' THEN c1.cost ELSE NULL END) '支出'FROM c1GROUP BY c1.CreateDate 

读书人网 >SQL Server

热点推荐