根据不同的JOIN附加SQL列

时间:2014-10-07 21:07:28

标签: 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编译报告,它实际上只允许您根据单个数据集(单个查询)AFAIK绘制数据图表。我想绘制总的“IPAC /存款”金额与“存款”金额。

1 个答案:

答案 0 :(得分: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