Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL从子查询中以逗号分隔的值获取列_Sql_Database_Postgresql_Subquery - Fatal编程技术网

SQL从子查询中以逗号分隔的值获取列

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

我的postresql中有这些表:-
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)

请添加所有表的示例数据以及预期输出。仅根据上面显示的内容,可能很难给出准确答案。请添加所有表格的示例数据以及预期输出。仅凭你上面展示的内容,可能很难给你一个准确的答案。非常感谢。非常感谢