我有同一个表都工作了,我基本上是希望将搜索结果结合起来,例如2个类似的查询是什么第一查询不返回第二个查询提供默认值。我在这里尽可能简化了问题。我使用Oracle btw。SQL一个独特的列值合并结果集
表有帐号在它的信息的数量的帐户,并有用于与commit_date插入帐户信息时,要告诉每个帐户多个条目。我需要获取当前某个日期的帐户信息。
的查询需要帐户ID和日期的列表。
下面是该查询:
-- Select the row which was current for the accounts for the given date. (won't return anything for an account which didn't exist for the given date)
SELECT actr.*
FROM Account_Information actr
WHERE actr.account_id in (30000316, 30000350, 30000351)
AND actr.commit_date <= to_date('2010-DEC-30','YYYY-MON-DD ')
AND actr.commit_date =
(
SELECT MAX(actrInner.commit_date)
FROM Account_Information actrInner
WHERE actrInner.account_id = actr.account_id
AND actrInner.commit_date <= to_date('2010-DEC-30','YYYY-MON-DD ')
)
这看起来有点丑陋,但它返回一个单独的行,这是在指定日期的当前每个帐户。问题是,如果帐户在给定日期之后才存在,它不会返回任何内容。
选择每个帐户的最早的帐户信息的繁琐 - 我并不需要提供一个日期为这一个:
-- Select the earliest row for the accounts.
SELECT actr.*
FROM Account_Information actr
WHERE actr.account_id in (30000316, 30000350, 30000351)
AND actr.commit_date =
(
SELECT MAX(actrInner .commit_date)
FROM Account_Information actrInner
WHERE actrInner .account_id = actr.account_id
)
但我想在这样的方式合并结果集:
对于每一个客户,如果在第一个结果集为它帐户信息 - 使用。 否则,请使用第二个结果集中的帐户信息。
我研究过所有的联接我可以没有成功使用。工会几乎这样做,但他们只会合并为独特的行。我想根据每行中的帐户ID进行合并。
Sql Merging two result sets - 我的情况显然要复杂得多
SQL to return a merged set of results - 可能是我能够适应这种技术?我是一个被迫编写SQL的程序员,我不能很好地遵循这个例子,看看我能够如何修改它以满足我的需要。
啊,谢谢你方便的解释。我认为我应该可以通过加入来完成,但无法弄清楚如何在列上加倍。我之前没有使用coalesce,这似乎是拼图的缺失部分。我现在就读它了! – Scott 2013-03-07 05:33:19