我有一张这样的桌子:
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不存在;
任何人都可以帮助我获得如何达到期望的结果。
您的表没有名为first_name
或last_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。