postgreSQL将2列从1表变成1表,保留SELECT查询中的所有行



我正在处理一个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()的结果则不会。

最新更新