SQL用于接收值的总和,并且该值按一个ID分隔

时间:2014-12-17 14:19:25

标签: sql sql-server oracle

我在两个不同的数据库(SQL Server和Oracle)中有表AGR_IMP_TOTAL_ACTTIPOACTIVO

AGR_IMP_TOTAL_ACT

-----------------------------------------------------------------------------
|id_activo|impacto_Total|id_Dimension|riesgo_Total|version_jpa|id_TipoActivo|
|---------|-------------|------------|------------|-----------|-------------|
|    3    |      0      |    1       |     0      |    0      |    1        |
|    3    |    10000    |    2       |   1000     |    1      |    1        |
|    3    |     2000    |    3       |     0      |    1      |    1        |
|    3    |     1000    |    4       |    550     |    0      |    1        |
|    3    |     125     |    5       |    500     |    0      |    1        |
-----------------------------------------------------------------------------

TIPOACTIVO

------------------------
|id_tipoActivo| nombre |
|-------------|--------|
|     1       | algo   |
------------------------

目前,我使用此查询使用所有维度(1000 + 550 + 500 = 2550)以id_activo的总和提取riesgo_Total 3。

现在我需要提取所有维度的总和和sum(riesgo_Total)以及所有维度,但所有维度都在同一个查询中。

直到今天我才使用这些查询:

// Query to get all riesgo_total (of all dimensions).
SELECT T.ID_TIPOACTIVO, TA.NOMBRE, T.ID_ACTIVO, SUM(RIESGO_TOTAL) AS RIESGO_TOTAL 
FROM AGR_IMP_TOTAL_ACT T JOIN TIPO_ACTIVO TA ON (T.ID_TIPOACTIVO = TA.ID_TIPOACTIVO) 
WHERE RIESGO_TOTAL>0
GROUP BY T.ID_TIPOACTIVO, TA.NOMBRE, T.ID_ACTIVO 
ORDER BY RIESGO_TOTAL DESC

// Query to get riesgo_total of id_dimension = 1.
SELECT T.ID_TIPOACTIVO, TA.NOMBRE, T.ID_ACTIVO, SUM(RIESGO_TOTAL) AS RIESGO_TOTAL 
FROM AGR_IMP_TOTAL_ACT T JOIN TIPO_ACTIVO TA ON (T.ID_TIPOACTIVO = TA.ID_TIPOACTIVO) 
WHERE RIESGO_TOTAL>0 AND ID_DIMENSION = '1'
GROUP BY T.ID_TIPOACTIVO, TA.NOMBRE, T.ID_ACTIVO 
ORDER BY RIESGO_TOTAL DESC

如何获得像

这样的结果
AGR_IMP_TOTAL_ACT = T
TIPOACTIVO = TA

|T.ID_ACTIVO | TA.NOMBRE | Riesgo_total (all dimension) | riesgo_total (id_dimension = 1) | riesgo_total (id_dimension = 2) | riesgo_total (id_dimension = 3) | riesgo_total (id_dimension = 4) |  riesgo_total (id_dimension = 5) |
|------------|-----------|------------------------------|---------------------------------|---------------------------------|---------------------------------|---------------------------------|----------------------------------|
|     3      |  algo     |        2550                  |               0                 |              1000               |            0                    |             550                 |                500               |

提前谢谢。

1 个答案:

答案 0 :(得分:2)

您可以在总和中使用案例陈述来获取各个维度的总和

SELECT T.ID_TIPOACTIVO, TA.NOMBRE, T.ID_ACTIVO, SUM(RIESGO_TOTAL) AS RIESGO_TOTAL,
SUM(CASE WHEN id_Dimension = 1 THEN riesgo_Total ELSE 0 END) AS RIESGO_TOTAL_1,
SUM(CASE WHEN id_Dimension = 2 THEN riesgo_Total ELSE 0 END) AS RIESGO_TOTAL_2,
SUM(CASE WHEN id_Dimension = 3 THEN riesgo_Total ELSE 0 END) AS RIESGO_TOTAL_3,
SUM(CASE WHEN id_Dimension = 4 THEN riesgo_Total ELSE 0 END) AS RIESGO_TOTAL_4,
SUM(CASE WHEN id_Dimension = 5 THEN riesgo_Total ELSE 0 END) AS RIESGO_TOTAL_5
FROM AGR_IMP_TOTAL_ACT T JOIN TIPO_ACTIVO TA ON (T.ID_TIPOACTIVO = TA.ID_TIPOACTIVO) 
WHERE RIESGO_TOTAL>0
GROUP BY T.ID_TIPOACTIVO, TA.NOMBRE, T.ID_ACTIVO 
ORDER BY RIESGO_TOTAL DESC