2014-10-07 84 views
0

我的问题是我有一张表,我想根据不同的JOIN条件从SQL数据库返回一列作为两个不同的列。根据不同的JOIN附加SQL列

我的两个选择语句:

我的第一个语句返回支票号码和金额为我们所有的检查已经通过的过程中经历的沉积 - >然后ipaced(只是一种称谓)。

SELECT COURTESY_CHECK.CHECK_NUMBER, 
COURTESY_CHECK.CHECK_AMOUNT, 
CHECK_DEPOSIT.ID AS DEPOSIT_ID 
FROM COURTESY_CHECK 
INNER JOIN CHECK_DEPOSIT ON CHECK_DEPOSIT.COURTESY_CHECK_ID = COURTESY_CHECK.ID 
INNER JOIN DEPOSIT ON CHECK_DEPOSIT_ID = DEPOSIT.ID 
INNER JOIN IPAC ON DEPOSIT.ID = IPAC.DEPOSIT_ID 

我的第二条语句返回刚刚存入支票的支票号码和金额。

SELECT COURTESY_CHECK.CHECK_NUMBER, 
COURTESY_CHECK.CHECK_AMOUNT, 
CHECK_DEPOSIT.ID AS DEPOSIT_ID 
FROM COURTESY_CHECK 
INNER JOIN CHECK_DEPOSIT ON CHECK_DEPOSIT.COURTESY_CHECK_ID = COURTESY_CHECK.ID 

我想有一个像

IPAC/DEPOSITED AMOUNT DEPOSITED AMOUNT CHECK_NUMBER 
--------------------- ---------------- ------------ 
$4.00          123456 
         $5.00    654321 

表我使用BIRT编译报道,它真的只允许基于单个数据集,以图表数据(这是一个单一查询) 据我所知。我想绘制“IPAC /存款”金额与“存款”金额的总和。

+0

'INNER JOIN IPAC ON DEPOSIT.ID = IPAC.DEPOSIT_ID'应该是'INNER JOIN IPAC ON CHECK_DEPOSIT.IPAC_ID = IPAC.ID' – Raz 2014-10-08 15:51:04

回答

1

你真的很接近。 UNION查询不会这样做吗?事情是这样的:

SELECT COURTESY_CHECK.CHECK_NUMBER, 
COURTESY_CHECK.CHECK_AMOUNT AS [IPAC AMOUNT], 
null AS [DEPOSITED AMOUNT], 
CHECK_DEPOSIT.ID AS DEPOSIT_ID 
FROM COURTESY_CHECK 
INNER JOIN CHECK_DEPOSIT ON CHECK_DEPOSIT.COURTESY_CHECK_ID = COURTESY_CHECK.ID 
INNER JOIN DEPOSIT ON CHECK_DEPOSIT_ID = DEPOSIT.ID 
INNER JOIN IPAC ON DEPOSIT.ID = IPAC.DEPOSIT_ID 

UNION 

SELECT COURTESY_CHECK.CHECK_NUMBER, null AS [IPAC AMOUNT], 
COURTESY_CHECK.CHECK_AMOUNT AS [DEPOSITED AMOUNT], 
CHECK_DEPOSIT.ID AS DEPOSIT_ID 
FROM COURTESY_CHECK 
INNER JOIN CHECK_DEPOSIT ON CHECK_DEPOSIT.COURTESY_CHECK_ID = COURTESY_CHECK.ID 

编辑......与此外CASE语句加入可能更有效 - 我认为这会工作,太:

SELECT COURTESY_CHECK.CHECK_NUMBER, 
CASE WHEN IPAC.DEPOSIT_ID IS NOT NULL THEN COURTESY_CHECK.CHECK_AMOUNT 
ELSE NULL END AS [IPAC AMOUNT], 
CASE WHEN IPAC.DEPOSIT_ID IS NOT NULL THEN NULL ELSE COURTESY_CHECK.CHECK_AMOUNT 
END AS [DEPOSITED AMOUNT], 
CHECK_DEPOSIT.ID AS DEPOSIT_ID 
FROM COURTESY_CHECK 
INNER JOIN CHECK_DEPOSIT ON CHECK_DEPOSIT.COURTESY_CHECK_ID = COURTESY_CHECK.ID 
LEFT JOIN DEPOSIT ON CHECK_DEPOSIT_ID = DEPOSIT.ID 
LEFT JOIN IPAC ON DEPOSIT.ID = IPAC.DEPOSIT_ID 
+0

实际上,CASE语句会更有效率。 。 。坚持下去,努力工作...... – Rocky 2014-10-07 21:32:08

+0

非常感谢您的帮助!我知道'UNION'操作符,但它连接了不附加它们的列。为列添加空值追加它们? – Raz 2014-10-08 15:51:42

+0

我没有尝试过你的'CASE'示例,但愿意更多地了解它。感谢您的选择。 – Raz 2014-10-08 15:55:04