Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.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_Join - Fatal编程技术网

Sql 将交易记录值大于或小于零的发票分组

Sql 将交易记录值大于或小于零的发票分组,sql,join,Sql,Join,我试图对此提出疑问,但我还没有运气。各表如下: INVOICE ID | INVOICENUMBER | CUSTOMER | VALUE 1 | 999 | 8 | 9000 2 | 999 | 8 | 1000 INVOICE_TRANSACTION InvoiceID | TYPE | VALUE 1 | cust | 5000 1 | cust | 2000 2 | cust | 1000 2 | cust | -1000 INVOICE_DETAIL InvoiceID | PU

我试图对此提出疑问,但我还没有运气。各表如下:

INVOICE
ID | INVOICENUMBER | CUSTOMER | VALUE
1 | 999 | 8 | 9000
2 | 999 | 8 | 1000


INVOICE_TRANSACTION
InvoiceID | TYPE | VALUE
1 | cust | 5000
1 | cust | 2000
2 | cust | 1000
2 | cust | -1000

INVOICE_DETAIL
InvoiceID | PURCHASEORDERID
1 | 7777

PURCHASE_ORDER
PURCHASEORDERID | ORDERTYPE
7777 | gross

PURCASE_ORDER_DETAILS
PURCHASEORDERID | ROW | STATUS
7777 | 1 | 1
7777 | 2 | 2
7777 | 3 | 3
我想要的结果是:

INVOICE VALUE TRANSACTION VALUE PURCHASEORDERID ORDERTYPE HIGH STATUS LOW STATUS
------- ----- ----------------- --------------- --------- ----------- ----------
1       9000  7000              7777            gross     3           1

换句话说,我希望结果将所有发票号分组,这些发票号的总发票金额大于或小于0。我对这一切都不熟悉,有人能帮我开始吗?

要从价值不为零的发票交易中获取发票ID

SELECT InvoiceID
FROM INVOICE_TRANSACTION
GROUP BY InvoiceID
HAVING SUM(VALUE) <> 0

看起来你想要这样的东西:

select i.id,
  sum(i.value) value,
  it.value TransValue,
  p.purchaseorderid,
  p.ordertype,
  pd.highstatus,
  pd.lowstatus
from invoice i
left join 
(
  select sum(value) value, invoiceid
  from invoice_transaction
  group by invoiceid
) it
  on i.id = it.invoiceid
left join invoice_detail id
  on i.id = id.invoiceid
left join purchase_order p
  on id.purchaseorderid = p.purchaseorderid
left join
(
  select max(status) highStatus, min(status) LowStatus,
    purchaseorderid
  from purcase_order_details
  group by purchaseorderid
) pd
  on p.purchaseorderid = pd.purchaseorderid
where it.value <> 0
group by i.id, p.purchaseorderid, p.ordertype;

请参见

我强烈建议为此创建一个sql。您使用的是什么sqlmysql、postgre、ms sql?什么版本?分组方式,且trans_值为0。剩下的留给OP做练习