comando WITH
Hola, como estan.. Necesito ayuda con un sql. necesito ordenar por ranking de 2 formas, una es por descripcion de un producto y otra por la suma del precio neto, el query es el siguiente:
WITH
RAN_SUMLINENETAMT AS (
SELECT
PRODUCTBRAND,
PRODUCTLINE,
PRODUCTCATEGORY,
QTYINVOICED,
LINENETAMT,
LINELISTAMT,
LINEDISCOUNTAMT,
PRICELIST,
RANKING
FROM(
SELECT
PRODUCTBRAND,
PRODUCTLINE,
PRODUCTCATEGORY,
QTYINVOICED,
LINENETAMT,
LINELISTAMT,
LINEDISCOUNTAMT,
PRICELIST,
DENSE_RANK()
OVER (ORDER BY LINENETAMT DESC NULLS LAST) AS RANKING
FROM(
SELECT
PRODUCTBRAND,
PRODUCTLINE,
PRODUCTCATEGORY,
sum(PRICELIST) as PRICELIST,
SUM(QTYINVOICED) AS QTYINVOICED,
SUM(LINENETAMT) AS LINENETAMT,
SUM(LINELISTAMT) AS LINELISTAMT,
SUM(LINEDISCOUNTAMT) AS LINEDISCOUNTAMT
FROM (
SELECT
PB.NAME AS PRODUCTBRAND,
PL.NAME AS PRODUCTLINE,
PC.NAME AS PRODUCTCATEGORY,
COMPIERE.BOMPRICELIST(P.M_PRODUCT_ID,’1000000′) AS PRICELIST,
(CASE WHEN I.ISRETURNTRX = ‘N’
THEN SUM(IL.QTYINVOICED)
ELSE SUM(IL.QTYINVOICED)*-1
END) AS QTYINVOICED,
(CASE WHEN I.ISRETURNTRX = ‘N’
THEN SUM(IL.LINENETAMT)
ELSE SUM(IL.LINENETAMT)*-1
END) AS LINENETAMT,
(CASE WHEN I.ISRETURNTRX = ‘N’
THEN SUM(IL.QTYINVOICED*IL.PRICELIST)
ELSE SUM(IL.QTYINVOICED*IL.PRICELIST)*-1
END) AS LINELISTAMT,
(CASE WHEN I.ISRETURNTRX = ‘N’
THEN SUM(IL.QTYINVOICED*(IL.PRICELIST-IL.PRICEACTUAL))
ELSE SUM(IL.QTYINVOICED*(IL.PRICELIST-IL.PRICEACTUAL))*-1
END) AS LINEDISCOUNTAMT
FROM COMPIERE.C_INVOICE I
INNER JOIN COMPIERE.C_INVOICELINE IL ON (I.C_INVOICE_ID=IL.C_INVOICE_ID)
INNER JOIN COMPIERE.C_CURRENCY CY ON (I.C_CURRENCY_ID = CY.C_CURRENCY_ID)
INNER JOIN COMPIERE.C_BPARTNER BP ON (I.C_BPARTNER_ID=BP.C_BPARTNER_ID)
LEFT OUTER JOIN COMPIERE.M_PRODUCT P ON (IL.M_PRODUCT_ID=P.M_PRODUCT_ID)
LEFT OUTER JOIN COMPIERE.C_PRODUCTBRAND PB ON (P.C_PRODUCTBRAND_ID=PB.C_PRODUCTBRAND_ID)
LEFT OUTER JOIN COMPIERE.C_PRODUCTLINE PL ON (P.C_PRODUCTLINE_ID=PL.C_PRODUCTLINE_ID)
LEFT OUTER JOIN COMPIERE.M_PRODUCT_CATEGORY PC ON (P.M_PRODUCT_CATEGORY_ID=PC.M_PRODUCT_CATEGORY_ID)
WHERE
I.AD_CLIENT_ID= ‘1000000’
AND I.DOCSTATUS IN (‘CO’, ‘CL’)
AND I.ISSOTRX=’Y’
AND P.M_PRODUCT_CATEGORY_ID IN (‘1000008′,’1000005′)
— FILTERS PRODUCTS BY BRAND
AND BP.NAME = ${BPartner}
AND TRUNC(I.DATEINVOICED) BETWEEN ${StartDate} AND ${EndDate}
GROUP BY PB.NAME, PL.NAME, PC.NAME , COMPIERE.BOMPRICELIST(P.M_PRODUCT_ID,’1000000′), I.ISRETURNTRX
–ORDER BY PC.NAME,PB.NAME, PL.NAME, P.SKU, P.NAME, COMPIERE.BOMPRICELIST(P.M_PRODUCT_ID,’1000000′), I.ISRETURNTRX
)
GROUP BY PRODUCTBRAND, PRODUCTLINE, PRODUCTCATEGORY
)
GROUP BY
PRODUCTBRAND,
PRODUCTLINE,
PRODUCTCATEGORY,
QTYINVOICED,
LINENETAMT,
LINELISTAMT,
LINEDISCOUNTAMT,
PRICELIST
)
)
SELECT
LRANKING,
PRODUCTBRAND,
PRODUCTLINE,
PRODUCTCATEGORY,
SKU,
DESCRIPTION,
QTYINVOICED,
LINENETAMT,
LINELISTAMT,
LINEDISCOUNTAMT,
PRICELIST,
RANKING
FROM(
SELECT
LRANKING,
PRODUCTBRAND,
PRODUCTLINE,
PRODUCTCATEGORY,
SKU,
DESCRIPTION,
QTYINVOICED,
LINENETAMT,
LINELISTAMT,
LINEDISCOUNTAMT,
PRICELIST,
DENSE_RANK()
OVER (PARTITION BY PRODUCTBRAND ORDER BY SUM(LINENETAMT) DESC NULLS LAST) AS RANKING
FROM(
SELECT
LRANKING,
PRODUCTBRAND,
PRODUCTLINE,
PRODUCTCATEGORY,
SKU,
DESCRIPTION,
sum(PRICELIST) as PRICELIST,
SUM(QTYINVOICED) AS QTYINVOICED,
SUM(LINENETAMT) AS LINENETAMT,
SUM(LINELISTAMT) AS LINELISTAMT,
SUM(LINEDISCOUNTAMT) AS LINEDISCOUNTAMT
FROM (
SELECT
RS.RANKING AS LRANKING,
PB.NAME AS PRODUCTBRAND,
PL.NAME AS PRODUCTLINE,
PC.NAME AS PRODUCTCATEGORY,
P.SKU,
P.NAME AS DESCRIPTION,
COMPIERE.BOMPRICELIST(P.M_PRODUCT_ID,’1000000’) AS PRICELIST,
(CASE WHEN I.ISRETURNTRX = ‘N’
THEN SUM(IL.QTYINVOICED)
ELSE SUM(IL.QTYINVOICED)*-1
END) AS QTYINVOICED,
(CASE WHEN I.ISRETURNTRX = ‘N’
THEN SUM(IL.LINENETAMT)
ELSE SUM(IL.LINENETAMT)*-1
END) AS LINENETAMT,
(CASE WHEN I.ISRETURNTRX = ‘N’
THEN SUM(IL.QTYINVOICED*IL.PRICELIST)
ELSE SUM(IL.QTYINVOICED*IL.PRICELIST)*-1
END) AS LINELISTAMT,
(CASE WHEN I.ISRETURNTRX = ‘N’
THEN SUM(IL.QTYINVOICED*(IL.PRICELIST-IL.PRICEACTUAL))
ELSE SUM(IL.QTYINVOICED*(IL.PRICELIST-IL.PRICEACTUAL))*-1
END) AS LINEDISCOUNTAMT
FROM COMPIERE.C_INVOICE I
INNER JOIN COMPIERE.C_INVOICELINE IL ON (I.C_INVOICE_ID=IL.C_INVOICE_ID)
INNER JOIN COMPIERE.C_CURRENCY CY ON (I.C_CURRENCY_ID = CY.C_CURRENCY_ID)
INNER JOIN COMPIERE.C_BPARTNER BP ON (I.C_BPARTNER_ID=BP.C_BPARTNER_ID)
LEFT OUTER JOIN COMPIERE.M_PRODUCT P ON (IL.M_PRODUCT_ID=P.M_PRODUCT_ID)
LEFT OUTER JOIN COMPIERE.C_PRODUCTBRAND PB ON (P.C_PRODUCTBRAND_ID=PB.C_PRODUCTBRAND_ID)
LEFT OUTER JOIN COMPIERE.C_PRODUCTLINE PL ON (P.C_PRODUCTLINE_ID=PL.C_PRODUCTLINE_ID)
LEFT OUTER JOIN COMPIERE.M_PRODUCT_CATEGORY PC ON (P.M_PRODUCT_CATEGORY_ID=PC.M_PRODUCT_CATEGORY_ID)
LEFT OUTER JOIN RAN_SUMLINENETAMT RS ON (RS.PRODUCTBRAND = PB.NAME AND RS.PRODUCTLINE = PL.NAME)
WHERE
I.AD_CLIENT_ID= ‘1000000’
AND I.DOCSTATUS IN (‘CO’, ‘CL’)
AND I.ISSOTRX=’Y’
AND P.M_PRODUCT_CATEGORY_ID IN (‘1000008′,’1000005′)
AND BP.NAME = ${BPartner}
AND TRUNC(I.DATEINVOICED) BETWEEN ${StartDate} AND ${EndDate}
GROUP BY RS.RANKING, PB.NAME, PL.NAME, PC.NAME, P.SKU,P.NAME, COMPIERE.BOMPRICELIST(P.M_PRODUCT_ID,’1000000′), I.ISRETURNTRX
ORDER BY RS.RANKING, P.SKU–PC.NAME,PB.NAME, PL.NAME, P.SKU, P.NAME, COMPIERE.BOMPRICELIST(P.M_PRODUCT_ID,’1000000’), I.ISRETURNTRX
)
GROUP BY LRANKING, PRODUCTBRAND, PRODUCTLINE, PRODUCTCATEGORY, SKU, DESCRIPTION
order by LRANKING ASC, SKU
)
GROUP BY LRANKING, PRODUCTBRAND,PRODUCTLINE,PRODUCTCATEGORY,SKU,DESCRIPTION, QTYINVOICED,LINENETAMT,LINELISTAMT,
LINEDISCOUNTAMT,PRICELIST
order by RANKING DESC
)
ORDER BY LRANKING ASC, RANKING
….Con este query no me hace el ranking sumado del precio neto.. ALGUIEN PODRIA AYUDARME???
Atte. Melina Mercado.