【问题标题】:filter based output of first cypher query (subquery)第一个密码查询(子查询)的基于过滤器的输出
【发布时间】:2019-01-29 10:24:46
【问题描述】:

我有以下 csv。

我创建的节点和关系如下:

LOAD CSV WITH HEADERS FROM "file:///invoice.csv" AS row  
CREATE (INVOICE:INVOICE {TRANS_DATE: row.TRANS_DATE,INVOICE_NO: row.INVOICE_NO,ARTICLE_NO: row.ARTICLE_NO,CUSTOMER_NO: row.CUSTOMER_NO,AMT: row.AMT,QTY: row.QTY})
MERGE (ARTICLE:ARTICLE {product_no: row.ARTICLE_NO})
CREATE (INVOICE)-[:contains]->(ARTICLE); 

现在我可以查询文章多于一个的发票了:

match (i:INVOICE) 
 with i.INVOICE_NO as INVOICE_NO, count(*) as INV_CNT
 where INV_CNT > 1 
 return INVOICE_NO,INV_CNT 

现在我想显示上述发票中包含的文章。我尝试了很多但没有成功。我会很感激你们的帮助。

invoice.csv

sr_no,TRANS_DATE,TICKET_NO,ARTICLE_NO,CUSTOMER_NO,AMT,QTY
1,20190101,1,1,1,200,1
2,20190101,1,2,1,500,4
3,20190101,2,1,1,20,5
4,20190101,3,4,1,20,6
5,20190101,4,5,4,20,7
6,20190101,4,6,4,20,1
7,20190101,4,1,4,20,2
8,20190101,5,1,9,20,2
9,20190101,6,2,10,20,1
10,20190101,7,8,11,20,1
11,20190101,8,4,21,20,1
12,20190101,8,5,21,20,1
13,20190101,9,1,25,20,1
14,20190101,10,11,50,20,5
15,20190101,11,11,14,20,1
16,20190101,12,12,14,20,1
17,20190101,13,4,10,20,3
18,20190101,14,14,1,20,1
19,20190101,14,14,1,20,2
20,20190101,14,14,1,20,200

【问题讨论】:

  • 您是否获得了“文章不止一个的发票”的正确结果?
  • 是的,我能够得到正确的结果。

标签: csv neo4j cypher


【解决方案1】:

我假设您获取“文章不止一个的发票”的查询是正确的,并添加了如何添加可选匹配以获取文章列表。

对于每张发票,它可以选择匹配文章。

MATCH (i:INVOICE) 
OPTIONAL MATCH (i)-[:contains]->(a:ARTICLE)
WITH i.INVOICE_NO AS INVOICE_NO, COUNT(*) AS INV_CNT, COLLECT(a) AS articles
WHERE INV_CNT > 1 
RETURN INVOICE_NO, INV_CNT, articles

您可以将其简化为:

MATCH (i:INVOICE)-[:contains]->(a:ARTICLE)
WITH i.INVOICE_NO AS INVOICE_NO, COUNT(*) AS INV_CNT, COLLECT(a) AS articles
WHERE INV_CNT > 1 
RETURN INVOICE_NO, INV_CNT, articles

【讨论】:

  • 这就像一个魅力。这是需要的。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-12
  • 2012-04-19
  • 2020-10-22
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多