我正在处理一个DB,它的事务表本可以拆分为2个,但开发团队认为这不值得。
现在我想检索交易及其日期。问题是:表包括2种不同类型的事务,意思是:我有2个日期列:;transaction_date";以及";事务处理日期";(为了保密,我正在修改姓名(。
对于my数据分析,日期列是一个单独的数据。如何选择融合日期列、事务和beta_transaction?(对于beta_transaction或标准交易中填充的每个数量,我应该在其中一个交易列中获得相应的Null值(
我考虑过
SELECT date AS d, b_date AS d, transaction, b_transaction FROM transaction
这是要走的路吗?我现在不能测试,但我认为这不起作用。
如果我的问题是无稽之谈,请原谅我并删除它,我是一个超级初学者。我使用的是Postgres12,但不认为这是专门针对Postgres的。
根据您的描述,我认为这可能是您所需要的:
SELECT [date] as d
, transaction
FROM table1
WHERE [date] is not null
UNION ALL
SELECT b_date as d
, b_transaction
FROM table1
WHERE b_date is not null
这样做的优点是,如果您有一行的和日期都为非null值,那么您将同时获得日期集和事务值。
另一种方法是只使用一个带有COALESCE([date], b_date)
或ISNULL([date], b_date)
表达式的SELECT
语句,但是,如果两个日期列中都有非null值,则最终会返回函数中列出的第一个列中的信息,而忽略第二个。带有UNION ALL
的选项将返回[date]
为非null的所有数据,和返回b_date
为非null时的所有数据。
这也可以利用在日期字段上建立的任何索引(用于任何进一步的排序或选择(,而COALESCE()
或ISNULL()
的结果则不会。