2016-08-17 55 views
-3

我呼吁user_var需要支点查询我的表

User_ID  VAR_ID VALUE START_DATE  END_DATE 
1   25  2.0  01-JAN-2009  31-DEC-2011 
1   56  4.56 01-JAN-2009  31-DEC-2011 
1   89  7.8  01-JAN-2009  31-DEC-2011 
2   25  5.64 01-OCT-2009  30-SEPT-2012 
2   56  4.86 01-OCT-2009  30-SEPT-2012 
2   89  9.87 01-OCT-2009  30-SEPT-2012 
1   25  6.33 01-JUL-2009  30-JUN-2012 
1   56  4.78 01-JUL-2009  30-JUN-2012 
1   89  1.2  01-JUL-2009  30-JUN-2012 
2   25  7.21 01-JAN-2009  31-DEC-2011 
2   56  2.33 01-JAN-2009  31-DEC-2011 
2   89  1.65 01-JAN-2009  31-DEC-2011 
1   25  7.89 01-APR-2009  31-MAR-2012 
1   56  0.00 01-APR-2009  31-MAR-2012 
1   89  1.78 01-APR-2009  31-MAR-2012 
2   25  7.6  01-JUL-2009  30-JUN-2012 
2   56  7.15 01-JUL-2009  30-JUN-2012 
2   89  8.54 01-JUL-2009  30-JUN-2012 

我想透视表VAR_ID随时间间隔的基础上 假设VAR_ID 25代表信用 VAR_ID 56代表借记一个下表 和VAR_ID 89代表平衡

输出应该

USER_ID  CREDIT  DEBIT BALANCE  START_DATE  END_DATE 
1   2.0   4.56 7.8   01-JAN-2009  31-DEC-2011 
2   5.64  4.86 9.87  01-OCT-2009  30-SEPT-2012 
1   6.33  4.78 1.2   01-JUL-2009  30-JUN-2012 
2   7.21  2.33 1.65  01-JAN-2009  31-DEC-2011 
1   7.89  0.00 1.78  01-APR-2009  31-MAR-2012 
2   7.6   7.15 8.54  01-JUL-2009  30-JUN-2012 
+1

请向我们显示您的查询,并编辑您的问题标签。它不能既是mysql也是oracle。 –

+0

那么,你的组是由(user_id,start_date,end_date)来标识的?这有点不寻常,因为您的时间间隔重叠,即使对于同一个用户。是否存在(或者是否需要)辅助ID,以区分这些时间间隔?如果user_id 1在同一时间段内有两个信用点和两个借方 - 如何区分它们? (或者你把它们加在一起 ​​- 但是,为什么?当你有重叠的时间间隔时没有多少意义)。 – mathguy

+0

@ mathguy-不,我不总结任何东西。用户在特定的时间间隔内只有一组信用值,借记和余额值。 对于相同的VAR_ID,即对于信用卡,借记卡或余额,该用户不会重复该时间间隔。 – John

回答

1

有条件聚合

SELECT 
    u.user_id 
    ,SUM(CASE WHEN var_id = 25 THEN u.Value END) AS Credit 
    ,SUM(CASE WHEN var_id = 56 THEN u.Value END) AS Debit 
    ,SUM(CASE WHEN var_id = 89 THEN u.Value END) AS Balance 
    ,Start_Date 
    ,End_Date 
FROM 
    user_var u 
GROUP BY 
    u.user_id 
    ,start_date 
    ,end_date