StackOverflow社区!我想知道你是否可以帮我解决这个问题:
我在这个表中有一个自反关系,并且连接到其他表。所以我想要检查子行和父母也没有孩子的那些在jasperreport中对它进行分组。仅插入父项,而不是package和product_idproduct的项是0。
所以问题是:是否有任何更简单的查询来实现我的目标?
products
idproduct
name
N1
.
.
N2
package bit// 1 if i'm a package, 0 if i'm not
product_idproduct // this one is the reflexivefield // 0 meaning no parent >0 the parent id
soldProducts
idproduct
discount
operationNumber
quantity
这是我的第一个方法:
SELECT
Pr.nombre ,
Pr.precioventa ,
pventas.cantidad,
case
when ( Pr.paquete=1 and Pr.productos_idproductos=0 )then pventas.cantidad * (pr.precioventa - ((pr.precioventa * pm.Modifier)))
when ( Pr.paquete=0 and Pr.productos_idproductos>0 ) then 00.00
when ( Pr.paquete=0 and Pr.productos_idproductos=0 )then pventas.cantidad * (pr.precioventa - ((pr.precioventa * pm.Modifier)))
end 'Importe Articulo',
Pr.productos_idProductos,pm.Modifier
FROM
productosventas Pventas
right JOIN
productos Pr ON pventas.productos_idProductos = Pr.idProductos
LEFT JOIN
ventas V ON Pventas.ventas_idventa = V.idventa
left join
`pricemodifiers` pm ON Pventas.`PriceModifiers_idPriceModifier` = pm.`idPriceModifier`
left join
productosventas Pventas2 on pr.productos_idproductos=pventas2.productos_idproductos
where V.idventa=159
order by productos_idproductos
这个错过了子行。
第二种方法和答案!但你可以做得更短吗?
SELECT
Pr.idProductos,
Pr.nombre,
Pr.precioventa,
pventas.cantidad,
case
when
Pr.productos_idproductos = 0
&& Pr.paquete = 1
then
pventas.cantidad * (pr.precioventa - ((pr.precioventa * Pventas.PriceModifiers_idPriceModifier)))
when
Pr.productos_idproductos = 0
&& Pr.paquete = 0
then
pventas.cantidad * (pr.precioventa - ((pr.precioventa * Pventas.PriceModifiers_idPriceModifier)))
end as 'Importe Articulo',case when
Pr.productos_idproductos = 0
&& Pr.paquete = 1
then Pr.idProductos else pr.Productos_idproductos end as agrupador
FROM
productosventas Pventas
left JOIN
productos Pr ON pventas.productos_idProductos = Pr.idProductos
LEFT JOIN
ventas V ON Pventas.ventas_idventa = V.idventa
left join
`pricemodifiers` pm ON Pventas.`PriceModifiers_idPriceModifier` = pm.`idPriceModifier`
where
v.idventa = 159
union
SELECT
Pr.idProductos,Pr.nombre,
Pr.precioventa,
pventas.cantidad,
case
when
Pr.productos_idproductos > 0
&& pr.paquete = 0
then
00.00
end as 'Importe Articulo',case
when
Pr.productos_idproductos > 0
&& pr.paquete = 0
then Pr.productos_idproductos else 0 end as agrupador
FROM
productosventas Pventas
inner JOIN
productos Pr ON pventas.productos_idProductos = Pr.productos_idProductos
left join
`pricemodifiers` pm ON Pventas.`PriceModifiers_idPriceModifier` = pm.`idPriceModifier`
where
Pventas.ventas_idventa = 159