再次,我正在努力了解SQL的工作方式。因此,我将向您说明我拥有的数据以及到目前为止所做的一切。
我有5张桌子:
贷款
loan_role
法律人
legal_person_attribute
legal_person_attribute_key
我想选择不同的列,其中属性键选择我想要的值列。我所做的是这样:
select l.id as loan_nr, l.country, l.currency, l.principal_amount, l.duration, l.nominal_interest_rate, l.annuity, l.payout_date ,
(select lpa.value as company_name
from etl.legal_person_attribute lpa, etl.legal_person_attribute_key lpak
where lpa.fk_legal_person_attribute_key = lpak.id and lpak.attribute_key = 'companyName'
)
from etl.loan l
where l.country ='DE'
但是,它返回此错误:
错误:用作查询的子查询返回的一行以上
单独尝试,该查询有效。
select lpa.value as company_name
from etl.legal_person_attribute lpa, etl.legal_person_attribute_key lpak
where lpa.fk_legal_person_attribute_key = lpak.id and lpak.attribute_key = 'companyName'
你会怎么做?也许使用临时表(我真不知道该怎么做)?可能是加盟问题吗?
提前谢谢!
更多信息:
我放置的图像是我正在使用的表格的一些示例,只是为了说明它们的状态。
查询不完整,因为我不知道如何完成查询。
我想要的是一个带有主要选定列的表,然后添加子查询,我想为每个值检索一个列。
我已经做到了:
select l.id as loan_nr, l.country, l.currency, l.principal_amount, l.duration, l.nominal_interest_rate, l.annuity, l.payout_date,
(select lpa.value from etl.legal_person_attribute lpa, etl.legal_person_attribute_key lpak where lpa.fk_legal_person_attribute_key = lpak.id and lpak.id = '180'
)as postcode
from etl.loan l,
etl.loan_person_role lpr,
etl.legal_person lp,
etl.legal_person_attribute lpa,
etl.legal_person_attribute_key lpak
where l.id = lpr.loan_id and lp.id_user = lpr.fk_legal_person and lpa.fk_user = lp.id_user and lpa.fk_legal_person_attribute_key = lpak.id and
--lpak.id = '180'and
l.profit_center='SME' and
l.country='DE' and
l.payout_date::DATE <= (date_trunc('month', current_date)-'1sec'::interval)::DATE
group by l.id, l.country, l.currency, l.principal_amount, l.duration, l.nominal_interest_rate, l.annuity, l.payout_date, lpa.value
limit 100
还是同样的问题。可能是由于value列垂直存储了所有数据,我想将其提取到不同的列中,并根据属性键为它们指定不同的名称吗?