Mysql 在单行中连接列

Mysql 在单行中连接列,mysql,sql,select,group-by,sum,Mysql,Sql,Select,Group By,Sum,我有一张桌子,看起来像 TRANSACTION_ID VALUE TRANSACTION_TYPE AGR_NBR PART_NBR 1 3456 BOOKING ABC1 1 2 345678 BOOKING ABC2 NULL 3 45678 BOOKING ABC1 2

我有一张桌子,看起来像

TRANSACTION_ID  VALUE   TRANSACTION_TYPE    AGR_NBR PART_NBR    
1               3456      BOOKING            ABC1    1    
2               345678    BOOKING            ABC2   NULL    
3               45678     BOOKING            ABC1   2    
4               45678     BIING              ABC2   NULL    
5               45678     BILLING            ABC1   1    
6               4775678   BILLING            ABC2   NULL
我正在该表上运行一个简单的select,如下所示:

SELECT AGR_NBR,PART_NBR,

CASE WHEN TRANSACTION_TYPE = 'BOOKING' 
    THEN SUM(VALUE)
    END AS BOOKING_VAL,

CASE WHEN TRANSACTION_TYPE = 'BILLING' 
    THEN SUM(VALUE)
    END AS BILLINNG_VAL

FROM AA_TEST_TABLE
WHERE AGR_NBR = 'ABC1'

GROUP BY AGR_NBR,PART_NBR,TRANSACTION_TYPE;
来自上述查询的输出为:

AGR_NBR PART_NBR    BOOKING_VAL BILLINNG_VAL    
ABC1    1           NULL        45678    
ABC1    1           3456        NULL    
ABC1    2           45678       NULL
但我想要的是相同的AGR_NBR&PART like(ABC1&1),在这种情况下,应该只有一行,如下所示&我更愿意尽可能使用一个select语句,因为原始数据中有很多公式和连接,而且这只是一行的虚拟数据,但实际上会有N行

AGR_NBR PART_NBR    BOOKING_VAL BILLINNG_VAL    
ABC1    1           3456        45678
试试这个:

SELECT A.AGR_NBR, A.PART_NBR, 
       SUM(CASE WHEN A.TRANSACTION_TYPE = 'BOOKING' THEN A.VALUE ELSE 0 END) AS BOOKING_VAL,
       SUM(CASE WHEN A.TRANSACTION_TYPE = 'BILLING' THEN A.VALUE ELSE 0 END) AS BILLINNG_VAL
FROM AA_TEST_TABLE A
WHERE A.AGR_NBR = 'ABC1'
GROUP BY A.AGR_NBR, A.PART_NBR; 
试试这个:

     SELECT AGR_NBR, PART_NBR, SUM(BOOKING_VAL) AS BOOKING_VAL, SUM(BILLING_VAL) AS BILLING_VAL FROM 
       ( 
          SELECT AGR_NBR, PART_NBR, CASE WHEN TRANSACTION_TYPE = 'BOOKING' THEN SUM( VALUE ) END AS BOOKING_VAL, CASE WHEN TRANSACTION_TYPE = 'BILLING' THEN SUM( VALUE ) END AS BILLING_VAL FROM test WHERE AGR_NBR = 'ABC1' GROUP BY AGR_NBR, PART_NBR, TRANSACTION_TYPE 
       )  
     AS t GROUP BY AGR_NBR, PART_NBR

将其用于此,从AA_测试表中选择AGR_NBR、PART_NBR、SUM(交易类型为“记账”然后值结束时的情况)作为记账值,SUM(交易类型为“记账”然后值结束时的情况)作为记账值,其中AGR_NBR=AGR_NBR、PART_NBR的“ABC1”组;