1. 程式人生 > >MySQL實現把兩行資料合併為一行

MySQL實現把兩行資料合併為一行

   在專案中遇到了這樣一個問題:某人上月投資N元錢,本月投資M元錢,現要求把本月和上月的投資金額放在一行顯示。如下圖:


    解決方案:用left join on

詳細SQL指令碼如下:

INSERT INTO DW_ADS.TR04_OPER_003 (
	BUSINESS_DATE,
	USER_ID,
	MONTH_INVEST_MONEY,
	LAST_MONTH_INVEST_MONEY,
	INVEST_NET,
	DATA_DATE
) SELECT
	DATE_FORMAT(
			LAST_DAY(
				DATE_FORMAT(IN_DATE, '%Y-%m-%d')
			),
			'%Y%m%d'
		),
	A.USER_ID,
	A.AMOUNT,
	B.AMOUNT,
	(A.AMOUNT - B.AMOUNT),
	IN_DATE
FROM
	(
		SELECT
			USER_ID,
			SUM(AMOUNT) AS AMOUNT
		FROM
			DW_BDS.SMY_BIDDING_TRANS_DAY
		WHERE
			BUSINESS_SYSTEM_DATE >= DATE_FORMAT(
				DATE_ADD(
					IN_DATE,
					INTERVAL - DAY (IN_DATE) + 1 DAY
				),
				'%Y%m%d'
			)
		AND BUSINESS_SYSTEM_DATE <= DATE_FORMAT(
			LAST_DAY(
				DATE_FORMAT(IN_DATE, '%Y-%m-%d')
			),
			'%Y%m%d'
		)
		GROUP BY
			USER_ID
	) AS A
LEFT JOIN (
	SELECT
		USER_ID,
		SUM(AMOUNT) AS AMOUNT
	FROM
		DW_BDS.SMY_BIDDING_TRANS_DAY
	WHERE
		BUSINESS_SYSTEM_DATE >= DATE_FORMAT(
			DATE_SUB(
				DATE_SUB(
					DATE_FORMAT(IN_DATE, '%y-%m-%d'),
					INTERVAL EXTRACT(DAY FROM IN_DATE) - 1 DAY
				),
				INTERVAL 1 MONTH
			),
			'%Y%m%d'
		)
	AND BUSINESS_SYSTEM_DATE <= DATE_FORMAT(
		DATE_SUB(
			DATE_SUB(
				DATE_FORMAT(IN_DATE, '%y-%m-%d'),
				INTERVAL extract(DAY FROM IN_DATE) DAY
			),
			INTERVAL 0 MONTH
		),
		'%Y%m%d'
	)
	GROUP BY
		USER_iD
) AS B ON A.USER_ID = B.USER_ID;