2013-02-27 70 views
0

,所以我有以下查询PostgreSQL的双数加入

SELECT SUM(s.price) as "totalSales", 
     sum(CASE 
      WHEN er.verified AND er.price = 1.010101 THEN s.price 
      WHEN er.verified AND er.price > 1.010101 THEN er.price ELSE 0 END) as "totalRet", 
     c.company as "client" 
FROM "Esns" e 
    JOIN "EsnsSalesOrderItems" es on es."EsnId" = e."id" 
    JOIN "SalesOrderItems" s on es."SalesOrderItemId" = s.id 
    JOIN "SalesOrders" so on so.id = s."SalesOrderId" 
    JOIN "Clients" c on so."ClientId" = c.id      
    LEFT OUTER JOIN "EsnsRmas" er on er."EsnId" = e.id 
GROUP BY c.id 

但是,如果有多个在ES“EsnId”,它会计算呃多次,反之亦然。

我如何构造一切只计算一次?

回答

1
SELECT 
    SUM(s.price) as "totalSales", 
    sum(CASE 
     WHEN er.verified AND er.price = 1.010101 THEN s.price 
     WHEN er.verified AND er.price > 1.010101 THEN er.price ELSE 0 END) as "totalRet", 
    c.company as "client" 
FROM "Esns" e 
    JOIN (
     select distinct "EsnId" 
     from "EsnsSalesOrderItems" 
    ) es on es."EsnId" = e."id" 
    JOIN "SalesOrderItems" s on es."SalesOrderItemId" = s.id 
    JOIN "SalesOrders" so on so.id = s."SalesOrderId" 
    JOIN "Clients" c on so."ClientId" = c.id      
    LEFT OUTER JOIN "EsnsRmas" er on er."EsnId" = e.id 
GROUP BY c.id 
+0

因此,它不工作,因为它只会计数一个es,如果有多个。我需要发生的是它计算多个ES,但后来知道它不应该再次计数,因为它以前已经计算过了。 – user1175817 2013-02-27 20:31:48