我正在尝试使用SQL从IFS数据库(Oracle后端)中的两个表中提取数据。一个表包含一个地址列表,另一个表包含这些地址具有的类型。
示例:
地址表:
Address1
Address2
AddressType 表
Address1, DELIVERY, TRUE
Address1, DOCUMENT, FALSE
Address1, PAY, FALSE
Address2, DELIVERY, FALSE
Address2, PAY, TRUE
我可以编写一个查询来成功获取地址及其类型,但是最后我为每种地址类型添加了新行(本质上看起来像AddressType
表)。
SELECT
a.address_ID,
at.address_type,
at.address_type_default_b
FROM
addresses a,
address_type at
WHERE
a.address_ID = at.address_ID
我想要的是一个查询,它将“展平”表,将每种类型移动到列中。根据上面的示例,结果表将具有2行,4列,请参见下文。
所需结果
Address1, TRUE, FALSE, FALSE
Address2, FALSE,*NULL*,TRUE
请注意,我不在乎Null,空白,NA或NULL
任何帮助将不胜感激。我意识到我可以在excel中完成此操作,但是由于数据的大小和必须执行此操作的次数,在SQL中执行此操作会很不错。
很抱歉问题的格式不正确...我不知道如何插入表或使我的sql看起来正确。
答案 0 :(得分:1)
假设一个地址只有3个状态,并且每个状态只能发生一次:
如果您没有任何值,它将根据需要返回null
select a.address_ID,max( case when address_type='Delivery' then address_type_default_b end )
,max( case when address_type='Document' then address_type_default_b end )
,max( case when address_type='Pay' then address_type_default_b end )
from address_table a
left join addresstype_table at on a.address_ID=b.address_ID
group by a.address_ID