SELECT ACC_DTE,
SUM(CASE WHEN TRX_AMT > 0 THEN ABS(TRX_AMT) ELSE NULL END),
SUM(CASE WHEN TRX_AMT < 0 THEN ABS(TRX_AMT) ELSE NULL END)
FROM TAB
GROUP BY ACC_DTE
SUM(CASE WHEN TRX_AMT > 0 THEN ABS(TRX_AMT) ELSE NULL END),
SUM(CASE WHEN TRX_AMT < 0 THEN ABS(TRX_AMT) ELSE NULL END)
FROM TAB
GROUP BY ACC_DTE
SUM(CASE WHEN TRX_AMT > 0 THEN ABS(TRX_AMT) ELSE NULL END),
SUM(CASE WHEN TRX_AMT < 0 THEN ABS(TRX_AMT) ELSE NULL END)
FROM TAB
GROUP BY ACC_DTE大神 这SUM值函数是 相加的意思吧? 我感觉SQL的IF ELSE 看起来有点不懂 他这是怎么判断的? 每条数据都进行 这2个判断吗? 例如 第一条 2013-02-15 100块 第一个条件成立 就是100第一个值就是100的绝对值
第二条 2013-02-15 -50快 第一个条件不成立 第二个条件成立 就是50 疑惑来了 为什么这么做可以 让他们在同行中 ?????
2012-02-15 100 50
SUM(CASE WHEN TRX_AMT > 0 THEN ABS(TRX_AMT) ELSE NULL END),
SUM(CASE WHEN TRX_AMT < 0 THEN ABS(TRX_AMT) ELSE NULL END)
FROM TAB
GROUP BY ACC_DTE大神 这SUM值函数是 相加的意思吧? 我感觉SQL的IF ELSE 看起来有点不懂 他这是怎么判断的? 每条数据都进行 这2个判断吗? 例如 第一条 2013-02-15 100块 第一个条件成立 就是100第一个值就是100的绝对值
第二条 2013-02-15 -50快 第一个条件不成立 第二个条件成立 就是50 疑惑来了 为什么这么做可以 让他们在同行中 ?????
2012-02-15 100 50
其实那个位置sum、max、min都可以,因为我们进行了分组,所以得用分组函数才可以。
而case when是分组中的每一行进行判断,其实用几个case看你要将分组中的值分为几种情况。
像你举得例子,相当于要按照时间进行分组,并且按照正负数分为两组,这样我们就有了一种思路,我们何不分别对正数和负数进行分组函数呢。。所以就有了上面的sql,也满足了你的需求。。
举个例子你应该会好理解点,你先不考虑分组函数里面的case怎么写。其实就是,时间、sum(value)、sum(value)三个字段,但是这样后两个字段得到的值不是我们想要的,因为我们一个要正数一个要负数,所以只要在里面进行判断就可以得到了,相当于第一个sum对正数进行求和、最大值或者最小值进行分组计算,后一个按照负数进行求和等分组计算。
这也是比较常用的行转列。。更多的时候我们在分组函数中用decode。。
SUM(CASE WHEN TRX_AMT > 0 THEN ABS(TRX_AMT) ELSE NULL END),
SUM(CASE WHEN TRX_AMT < 0 THEN ABS(TRX_AMT) ELSE NULL END)
FROM TAB
GROUP BY ACC_DTE大神 这SUM值函数是 相加的意思吧? 我感觉SQL的IF ELSE 看起来有点不懂 他这是怎么判断的? 每条数据都进行 这2个判断吗? 例如 第一条 2013-02-15 100块 第一个条件成立 就是100第一个值就是100的绝对值
第二条 2013-02-15 -50快 第一个条件不成立 第二个条件成立 就是50 疑惑来了 为什么这么做可以 让他们在同行中 ?????
2012-02-15 100 50
其实那个位置sum、max、min都可以,因为我们进行了分组,所以得用分组函数才可以。
而case when是分组中的每一行进行判断,其实用几个case看你要将分组中的值分为几种情况。
像你举得例子,相当于要按照时间进行分组,并且按照正负数分为两组,这样我们就有了一种思路,我们何不分别对正数和负数进行分组函数呢。。所以就有了上面的sql,也满足了你的需求。。
举个例子你应该会好理解点,你先不考虑分组函数里面的case怎么写。其实就是,时间、sum(value)、sum(value)三个字段,但是这样后两个字段得到的值不是我们想要的,因为我们一个要正数一个要负数,所以只要在里面进行判断就可以得到了,相当于第一个sum对正数进行求和、最大值或者最小值进行分组计算,后一个按照负数进行求和等分组计算。
这也是比较常用的行转列。。更多的时候我们在分组函数中用decode。。谢谢大神!!