SQL从子查询中以逗号分隔的值获取列
我的postresql中有这些表:-SQL从子查询中以逗号分隔的值获取列,sql,database,postgresql,subquery,Sql,Database,Postgresql,Subquery,我的postresql中有这些表:- 1.付款(id、编号、金额) 2.发票(id、编号、金额) 以及发票付款表,用于将付款金额分配给发票 3.发票付款(id、付款id、发票id、金额) 一次付款可分配给多张发票。 现在我需要付款详细信息,但我也需要发票。此付款分配给的发票数量。我正在做这样的事情:- SELECT payments.number, payments.amount, (SELECT invoices.number from invoices INNER J
1.付款(id、编号、金额)
2.发票(id、编号、金额)
以及发票付款表,用于将付款金额分配给发票
3.发票付款(id、付款id、发票id、金额)
一次付款可分配给多张发票。 现在我需要付款详细信息,但我也需要发票。此付款分配给的发票数量。我正在做这样的事情:-
SELECT
payments.number,
payments.amount,
(SELECT invoices.number from invoices INNER JOIN invoice_payments
ON invoices.id = invoice_payments.invoice_id
WHERE invoice_payments.payment_id = payments.id)
from payments
但它给我的错误是子查询返回的不止一行。如何将发票编号逗号分隔为每个付款行?
样本数据:-
Payment
id number amount
1 "Pay001" 100
2 "Pay002" 150
3 "Pay003" 150
Invoice
id number amount
1 "INV001" 100
2 "INV002" 200
3 "INV003" 100
InvoicePayment
id payment_id invoice_id amount
1 1 1 50
2 1 2 50
3 2 2 150
4 3 1 50
5 3 3 100
Result:-
payment_id payment_number amount invoices
1 "Pay001" 100 "INV001, INV002"
2 "Pay002" 150 "INV002"
3 "Pay003" 150 "INV001, INV002"
您可以在postgres中使用
string\u agg
函数连接行,行之间用所选的分隔符分隔
SELECT
payments.number,
payments.amount,
(SELECT string_agg(invoices.number,',') from invoices INNER JOIN invoice_payments
ON invoices.id = invoice_payments.invoice_id
WHERE invoice_payments.payment_id = payments.id)
from payments
您可以在postgres中使用
string\u agg
函数连接行,行之间用所选的分隔符分隔
SELECT
payments.number,
payments.amount,
(SELECT string_agg(invoices.number,',') from invoices INNER JOIN invoice_payments
ON invoices.id = invoice_payments.invoice_id
WHERE invoice_payments.payment_id = payments.id)
from payments
试试这个
SELECT
payments.number,
payments.amount,
inv_p.inv_no
from payments p inner join (Select invoice_payments.payment_id, string_agg(invoices.number,',') as inv_no
From invoices inner join invoice_payments on (invoices.id = invoice_payments.invoice_id)
Group by invoice_payments.payment_id) inv_p on (p.id = inv_p.payment_id)
试试这个
SELECT
payments.number,
payments.amount,
inv_p.inv_no
from payments p inner join (Select invoice_payments.payment_id, string_agg(invoices.number,',') as inv_no
From invoices inner join invoice_payments on (invoices.id = invoice_payments.invoice_id)
Group by invoice_payments.payment_id) inv_p on (p.id = inv_p.payment_id)
请添加所有表的示例数据以及预期输出。仅根据上面显示的内容,可能很难给出准确答案。请添加所有表格的示例数据以及预期输出。仅凭你上面展示的内容,可能很难给你一个准确的答案。非常感谢。非常感谢