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”组;