使用SQL

时间:2019-05-22 17:20:49

标签: sql

我正在尝试使用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看起来正确。

1 个答案:

答案 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