如何使用保存在表中的水平数据作为postgres中的列

问题描述 投票:0回答:1

我有一张这样的桌子:

Table VR

ID  Key         Value
123 First_Name  Vlad
234 First_Name  Jim
456 First_Name  Olimpia
123 Last_Name   Kofman
234 Last_Name   Cramer
456 Last_Name   Dukakis
123 Dept    IT
234 Dept    Marketing
456 Dept    Accounting
123 Sex M
234 Sex M
456 Sex F

现在,我想编写查询以获取其中First_Name ='Vlad'和Last_Name ='Cramer'的值。

我写的查询是:

SELECT VR.key,
      Min(( CASE
              WHEN ( VR.key = 'FIRST_NAME' ) THEN
             VR.value
              ELSE 'n/a'
            END )) AS first_name,
      Min(( CASE
              When ( VR.key = 'LAST_NAME' ) THEN
              VR.value
              ELSE 'n/a'
            END )) AS last_name
FROM   VR
WHERE   ( ( VR.first_name = 'Vlad' )
          AND ( VR.last_name = 'Cramer' ) )
GROUP  BY VR.key
ORDER  BY VR.first_name,
VR.last_name

我得到的异常是亚马逊](500310)无效的操作:列VR.first_name不存在;

任何人都可以帮助我获得如何达到期望的结果。

sql group-by amazon-redshift entity-attribute-value
1个回答
0
投票

您的表没有名为first_namelast_name的列-这些是key列中的值。

我认为您实际上是在寻找条件聚合:

select id
from vr
where key in ('First_Name', 'Last_Name')
group by id
having 
    count(*) filter(where key = 'First_Name' and value = 'Vlad') = 1
    and count(*) filter(where key = 'Last_Name' and value = 'Cramer') = 1

这使您的id的名字等于Vlad,姓氏等于Cramer。

© www.soinside.com 2019 - 2024. All rights reserved.