2010-07-13 43 views
2

我正在尝试执行一个查询,该查询返回购买单的信息,但也有另一个具有该单据详细信息的表,但我需要将该总额添加到其他查询,但是我不能添加列,因为它说我需要在组中选择相同的对象,并且我尝试了这种方式,但它说它返回多个值。请帮助! :d将SUM列添加到查询中

SELECT fc.fecha_factura_compra AS fecha, fc.id_factura AS no_factura, fc.serie, 
     o.abreviatura + CAST(p.corr_id AS VARCHAR(255)) AS codigo_trupp, 
     p.nombre, fc.dias_credito, fc.tipo_cambio, 
     (SELECT SUM(dc.peso_neto * dc.precio_unitario) 
     FROM detalle_compra AS dc 
     GROUP BY dc.id_proveedor, 
        dc.id_factura, 
        dc.serie) AS total 
FROM factura_compra AS fc, 
     origen AS o, 
     proveedor AS p, 
     detalle_compra AS dc 
WHERE fc.id_proveedor = p.id_proveedor 
     AND dc.id_proveedor = p.id_proveedor 
     AND dc.id_factura = fc.id_factura 
     AND p.id_origen = o.id_origen 
     AND dc.serie = fc.serie 
     AND dc.id_factura = fc.id_factura 
     AND dc.id_proveedor = fc.id_proveedor 
     AND fc.activo_inactivo = 'true' 
     AND fc.anulada = 'false' 
+0

请问您是否添加包含“group by”的查询以及确切的错误消息呢? – vlood 2010-07-13 07:21:12

+1

@ PedroC88 - 你会添加一个评论,解释你为什么奖励赏金?马塞洛的答案不适合你吗? – 2011-02-24 15:05:01

+0

我收到以下错误:'列是无效的,因为它不包含在聚合函数或GROUP BY子句中 – PedroC88 2011-02-25 14:24:44

回答

6

而是由栏目组的,你应该限制子选择连接列上,并从外省略detalle_compra选择:

SELECT fc.fecha_factura_compra as fecha, 
     fc.id_factura as no_factura, 
     fc.serie, 
     o.abreviatura+CAST(p.corr_id as varchar(255)) as Codigo_Trupp, 
     p.nombre, 
     fc.dias_credito, 
     fc.tipo_cambio, 
     (select sum(peso_neto*precio_unitario) 
      from detalle_compra 
     where serie = fc.serie and 
       id_factura = fc.id_factura and 
       id_proveedor = fc.id_proveedor) as Total 
    FROM factura_compra as fc,origen as o, proveedor as p 
WHERE fc.id_proveedor = p.id_proveedor and 
     p.id_origen = o.id_origen and 
     fc.activo_inactivo = 'true' and 
     fc.anulada = 'false' 

边注:使用BIT类型存储布尔值:

... 
     fc.activo_inactivo = 1 and 
     fc.anulada = 0 
8

与子查询的构造是非常缓慢,并且要避免。更好的解决方案是像下面这样编写查询。

要将总计添加到查询中,您需要对结果集中的所有其他字段使用group by

SELECT fc.fecha_factura_compra AS fecha 
    , fc.id_factura AS no_factura 
    , fc.serie 
    , o.abreviatura + CAST(p.corr_id AS VARCHAR(255)) AS codigo_trupp 
    , p.nombre 
    , fc.dias_credito 
    , fc.tipo_cambio 
    , SUM(dc.peso_neto * dc.precio_unitario) AS total 
FROM factura_compra AS fc 

JOIN proveedor AS p 
    ON fc.id_proveedor = p.id_proveedor 

JOIN origen AS o 
    ON p.id_origen = o.id_origen 

JOIN detalle_compra AS dc 
    ON dc.id_factura = fc.id_factura 
AND dc.serie = fc.serie 
AND dc.id_factura = fc.id_factura 
AND dc.id_proveedor = fc.id_proveedor 
AND dc.id_proveedor = p.id_proveedor 

WHERE fc.activo_inactivo = 'true' 
    AND fc.anulada = 'false' 

GROUP BY fc.fecha_factura_compra 
     , fc.id_factura 
     , fc.serie 
     , o.abreviatura + CAST(p.corr_id AS VARCHAR(255)) 
     , p.nombre 
     , fc.dias_credito 
     , fc.tipo_cambio