Converting Oracle Query to Snowflake - sql
Please need some help to convert the below oracle code to Snowflake. When I m trying this, facing invalid identifier, rownum,
SELECT Customer_Id
,Release_type
,Customer_Name
,XYZ_Product_Name
,XYZ_Product_Salesforce_Number
,XYZ_Product_Code
,XYZ_Product_Type
,Brand_Family
,Qty_Purchased
,qty_u2dt
,sbc_Term_Start_Date
,sbc_Term_End_Date
,Months_Sold
,Months_Used
,Remaining_Months
,round(decode(Months_Sold, 0, 0, (Months_Used / Months_Sold) * 100), 2) AS Term_used_perc
,round(Actual_monthly_Usage, 2) AS Actual_monthly_Usage
,round((Actual_monthly_Usage * Remaining_Months) + qty_u2dt, 2) AS projected_usage
,round(decode(Qty_Purchased, 0, 0, (((Actual_monthly_Usage * Remaining_Months) + qty_u2dt) / Qty_Purchased) * 100), 2) AS projected_usage_perc
,round((((Actual_monthly_Usage * Remaining_Months) + qty_u2dt) - Qty_Purchased), 2) AS projected_over_under_usage
,CASE
WHEN round(decode(Qty_Purchased, 0, 0, (((Actual_monthly_Usage * Remaining_Months) + qty_u2dt) / Qty_Purchased) * 100), 2) = 100
AND Qty_Purchased = qty_u2dt
THEN 'Resell'
WHEN round(decode(Qty_Purchased, 0, 0, (((Actual_monthly_Usage * Remaining_Months) + qty_u2dt) / Qty_Purchased) * 100), 2) < 100
THEN 'Churn'
WHEN round(decode(Qty_Purchased, 0, 0, (((Actual_monthly_Usage * Remaining_Months) + qty_u2dt) / Qty_Purchased) * 100), 2) > 100
THEN 'Upsell'
WHEN round(decode(Qty_Purchased, 0, 0, (((Actual_monthly_Usage * Remaining_Months) + qty_u2dt) / Qty_Purchased) * 100), 2) = 100
AND Qty_Purchased = (round((Actual_monthly_Usage * Remaining_Months) + qty_u2dt))
THEN 'On Track'
ELSE 'Unknown'
END Projected_Indicator
,Timeline
,Contr_End_Date
,Salesforce_Account_Number
,Salesforce_csa_Id
,Salesforce_Contact
,Product_Family_Description
,Product_Family_Code
,Product_Brand_Description
,Product_Brand_Code
,Product_Category_Description
,Product_Category_Code
,Product_Name
,Product_Code
,product_type
,s_2_CUSTOMER_OWNER_NID
,G_Customer_Number
,G_Customer_Name
,G_Customer_Address
,G_Customer_City
,G_Customer_Country
,G_Customer_Phone
,G_Customer_State_Prov
,G_Customer_Zip_Code
,G_Customer_SFDC_NID
,G_Customer_SFDC_NID_Link
,s_2_Customer_Number
,s_2_Customer_Name
,s_2_Customer_Address
,s_2_Customer_City
,s_2_Customer_Country
,s_2_Customer_Phone
,s_2_Customer_State_Prov
,s_2_Customer_Zip_Code
,s_2_Customer_Health_Status
,s_2_Customer_SFDC_NID
,s_2_Customer_SFDC_NID_Link
,s_2_Customer_XYZ_NID
,s_2_Customer_XYZ_NID_Link
,s_2_Customer_Sales_Owner
,s_2_Customer_CSM
,s_2_Customer_CSM_Manager
,s_2_Customer_Sales_Manager
,s_2_customer_sales_team
,s_2_Customer_PSM
,s_2_Customer_PSM_Manager
,sbc_number
,sbc_status
,subscriptiontype
,sbc_start_date
,sbc_end_date
,sbc_termination_date
,sbc_SFDC_NID
,sbc_SFDC_NID_Link
,istestaccount
,child_sub_name
,parent_sub_name
,requiredbyid
,Parent_PRODUCTID
,parent_productname
,Initial_recurrinng_term
,Recurrinng_reolover_term
,renewal_date
,rate_set_uom
,Unit_of_Measure
,Contract_Number
,Contract_SFDC_NID
,Contract_SFDC_NID_Link
,Contract_Start_Date
,Contract_End_Date
FROM (
SELECT Customer_Id
,Release_type
,Customer_Name
--,Contract_Number
,XYZ_Product_Name
,XYZ_Product_Salesforce_Number
,XYZ_Product_Code
,XYZ_Product_Type
,Brand_Family
,Qty_Purchased
,qty_u2dt
,sbc_Term_Start_Date
,sbc_Term_End_Date
,round(months_between(sbc_Term_End_Date, sbc_Term_Start_Date), 2) AS Months_Sold
,round(months_between(current_date, sbc_Term_Start_Date), 2) AS Months_Used
,(round(months_between(sbc_Term_End_Date, sbc_Term_Start_Date), 2)) - (round(months_between(current_date, sbc_Term_Start_Date), 2)) AS Remaining_Months
,decode(months_between(current_date, sbc_Term_Start_Date), 0, 0, ((qty_u2dt / months_between(current_date, sbc_Term_Start_Date)))) AS Actual_monthly_Usage
,CASE
WHEN sbc_Term_End_Date < current_date
THEN 'Past'
WHEN sbc_Term_Start_Date > current_date
THEN 'Future'
ELSE 'Present'
END Timeline
,Contr_End_Date
,Salesforce_Account_Number
,Salesforce_csa_Id
,Salesforce_Contact
,Product_Family_Description
,Product_Family_Code
,Product_Brand_Description
,Product_Brand_Code
,Product_Category_Description
,Product_Category_Code
,Product_Name
,Product_Code
,product_type
,s_2_CUSTOMER_OWNER_NID
,G_Customer_Number
,G_Customer_Name
,G_Customer_Address
,G_Customer_City
,G_Customer_Country
,G_Customer_Phone
,G_Customer_State_Prov
,G_Customer_Zip_Code
,G_Customer_SFDC_NID
,G_Customer_SFDC_NID_Link
,s_2_Customer_Number
,s_2_Customer_Name
,s_2_Customer_Address
,s_2_Customer_City
,s_2_Customer_Country
,s_2_Customer_Phone
,s_2_Customer_State_Prov
,s_2_Customer_Zip_Code
,s_2_Customer_Health_Status
,s_2_Customer_SFDC_NID
,s_2_Customer_SFDC_NID_Link
,s_2_Customer_XYZ_NID
,s_2_Customer_XYZ_NID_Link
,s_2_Customer_Sales_Owner
,s_2_Customer_CSM
,s_2_Customer_CSM_Manager
,s_2_Customer_Sales_Manager
,s_2_customer_sales_team
,s_2_Customer_PSM
,s_2_Customer_PSM_Manager
,sbc_number
,sbc_status
,subscriptiontype
,sbc_start_date
,sbc_end_date
,sbc_termination_date
,sbc_SFDC_NID
,sbc_SFDC_NID_Link
,istestaccount
,child_sub_name
,parent_sub_name
,requiredbyid
,Parent_PRODUCTID
,parent_productname
,Initial_recurrinng_term
,Recurrinng_reolover_term
,renewal_date
,rate_set_uom
,Unit_of_Measure
,Contract_Number
,Contract_SFDC_NID
,Contract_SFDC_NID_Link
,Contract_Start_Date
,Contract_End_Date
FROM (
SELECT DISTINCT cust.Id AS Customer_Id
,sub.rtpname AS Release_type
,org.Name AS Customer_Name
,prod.Name AS XYZ_Product_Name
,prod.SalesforceId AS XYZ_Product_Salesforce_Number
,prod.Code AS XYZ_Product_Code
,prod.Type AS XYZ_Product_Type
,pb.Name AS Brand_Family
,cntr.CURRENCYISOCODE AS currency_code
,nvl((
SELECT *
FROM (
SELECT to_char(cliterm.Quantity)
FROM XYZ_ContractLineItemTerm cliterm
WHERE cliterm.ContractLineItem_id = cli.Id
AND (
cliterm.EndDate IS NULL
OR cliterm.EndDate > add_months(current_date, - 3)
)
AND cliterm.PriceRuleItem_id IS NULL
ORDER BY cli.id DESC
)
WHERE rownum = 1
), cli.Quantity) AS Qty_Purchased
,nvl((
SELECT *
FROM (
SELECT cliterm.UsedQuantity
FROM XYZ_ContractLineItemTerm cliterm
WHERE cliterm.ContractLineItem_id = cli.Id
AND (
cliterm.EndDate IS NULL
OR cliterm.EndDate > add_months(current_date, - 3)
)
AND cliterm.PriceRuleItem_id IS NULL
ORDER BY cli.id DESC
)
WHERE rownum = 1
), cli.UsedQuantity) AS qty_u2dt
,nvl((
SELECT *
FROM (
SELECT cliterm.StartDate
FROM XYZ_ContractLineItemTerm cliterm
WHERE cliterm.ContractLineItem_id = cli.Id
AND (
cliterm.EndDate IS NULL
OR cliterm.EndDate > add_months(current_date, - 3)
)
AND cliterm.PriceRuleItem_id IS NULL
ORDER BY cli.id DESC
)
WHERE rownum = 1
), cli.StartDate) AS sbc_Term_Start_Date
,nvl((
SELECT *
FROM (
SELECT cliterm.EndDate
FROM XYZ_ContractLineItemTerm cliterm
WHERE cliterm.ContractLineItem_id = cli.Id
AND (
cliterm.EndDate IS NULL
OR cliterm.EndDate > add_months(current_date, - 3)
)
AND cliterm.PriceRuleItem_id IS NULL
ORDER BY id DESC
)
WHERE rownum = 1
), cli.EndDate) AS sbc_Term_End_Date
,nvl(to_char(cli.EndDate), (
CASE
WHEN (
cli.StartDate IS NOT NULL
AND con.InitialTerm > 0
)
THEN 'Auto Renewal'
ELSE ''
END
)) AS Contr_End_Date
,cust.SalesforceAccountNumber AS Salesforce_Account_Number
,cust.SalesforceId AS Salesforce_csa_Id
,'s12345' || con.SalesforceId || '/view' AS Salesforce_Contact
,prod_fam.product_family_code AS product_family_code
,prd.Product_Family__c AS Product_Family_Description
,prd.Brand_Code__c AS Product_Brand_Code
,prd.Product_Brand__c AS Product_Brand_Description
,prd.Category_Code__c AS Product_Category_Code
,prd.Product_Category__c AS Product_Category_Description
,prd.name AS Product_Name
,prd.productcode AS Product_Code
,prd.PRODUCT_TYPE__C AS product_type
,dasruler.id AS s_2_CUSTOMER_OWNER_NID
,rupa.global_ultimate_d_u_n_s_number AS G_Customer_Number
,rupa.name AS G_Customer_Name
,rupa.billingstreet AS G_Customer_Address
,rupa.billingcity AS G_Customer_City
,rupa.billingcountry AS G_Customer_Country
,rupa.phone AS G_Customer_Phone
,rupa.billingstate AS G_Customer_State_Prov
,rupa.billingpostalcode AS G_Customer_Zip_Code
,rupa.id AS G_Customer_SFDC_NID
,'12345'|| rupa.id || '/view' AS G_Customer_SFDC_NID_Link
,csa.csa__c AS s_2_Customer_Number
,csa.name AS s_2_Customer_Name
,csa.account_address__c AS s_2_Customer_Address
,csa.account_city__c AS s_2_Customer_City
,csa.account_country__c AS s_2_Customer_Country
,csa.phone AS s_2_Customer_Phone
,csa.account_state_province__c AS s_2_Customer_State_Prov
,csa.account_zip_code__c AS s_2_Customer_Zip_Code
,csa.id AS s_2_Customer_SFDC_NID
,'12345' || csa.id || '/view' AS s_2_Customer_SFDC_NID_Link
,csa.client_health_status__c s_2_Customer_Health_Status
,cust.id AS s_2_Customer_XYZ_NID
,'q12345' || cust.id || '/view' AS s_2_Customer_XYZ_NID_Link
,nvl(dasruler.firstname || ' ' || dasruler.lastname, 'UNKNOWN') AS s_2_Customer_Sales_Owner
,nvl(csacsm.csm, 'UNKNOWN') AS s_2_Customer_CSM
,nvl(csm_mgr.NAME, 'NAVL') AS s_2_Customer_CSM_Manager
,nvl(csasalesmanager.firstname || ' ' || csasalesmanager.lastname, 'UNKNOWN') AS s_2_Customer_Sales_Manager
,nvl(csasalesmanager.USER_SEGMENT__C, 'UNKNOWN') AS s_2_customer_sales_team
,nvl(csapsm.psm, 'NAVL') AS s_2_Customer_PSM
,nvl(psm_mgr.name, 'NAVL') AS s_2_Customer_PSM_Manager
,sub.name AS sbc_number
,sub.STATUS__C AS sbc_status
,sub.sbqq__subscriptiontype__c AS subscriptiontype
,nvl(sub.sbqq__subscriptionstartdate__c, sub.sbqq__startdate__c) AS sbc_start_date
,sub.SBQQ__ENDDATE__C AS sbc_end_date
,sub.sbqq__terminateddate__c AS sbc_termination_date
,sub.annual_recurring_total__c AS annual_recurring_total__c
,sub.one_time_total__c AS one_time_total__c
,sub.currencyisocode AS Localcurrency
,sub.id AS sbc_SFDC_NID
,'z12345' || sub.id || '/view' AS sbc_SFDC_NID_Link
,sub.name AS child_sub_name
,sub.RECURRING_INITIAL_TERM__C AS Initial_recurrinng_term
,sub.RECURRING_ROLLOVER_TERM__C AS Recurrinng_reolover_term
,sub.RENEWAL_DATE__C AS renewal_date
,pasub.name AS parent_sub_name
,sub.sbqq__requiredbyid__c AS requiredbyid
,pasub.SBQQ__PRODUCTID__C AS Parent_PRODUCTID
,pasub.SBQQ__PRODUCTNAME__C AS Parent_Productname
,csa.is_test_account__c AS istestaccount
,prd.rate_set_uom__C AS rate_set_uom
,PRD.Quantity_unit_of_measure__C AS Unit_of_Measure
,cntr.CONTRACTNUMBER AS Contract_Number
,cntr.id AS Contract_SFDC_NID
,'c123456'|| cntr.id || '/view' AS Contract_SFDC_NID_Link
,cntr.startdate AS Contract_Start_Date
,cntr.enddate AS Contract_End_Date
,cntr.annual_recurring_total__c AS Contract_annual_recurring_amt
,cntr.one_time_total__c AS Contract_one_time_total
,cntr.initial_term_total__c AS First_year_contract_value
FROM XYZ_ContractLineItem cli
INNER JOIN XYZ_Contract con ON cli.Contract_id = con.Id
INNER JOIN XYZ_Customer cust ON con.Customer_id = cust.Id
INNER JOIN XYZ_Organization org ON org.Customer_id = cust.Id
INNER JOIN XYZ_Product prod ON cli.Product_id = prod.Id
INNER JOIN XYZ_ProductBrand pb ON prod.ProductBrand_id = pb.Id
LEFT JOIN sfacc csa ON cust.SalesforceAccountNumber = csa.csa__c
LEFT JOIN sfacc rupa ON csa.parentid = rupa.id
LEFT JOIN sf_SBQQ__sbc__C sub ON sub.id = cli.salesforceid
LEFT JOIN SF_SBQQ__sbc__C pasub ON pasub.id = sub.sbqq__requiredbyid__c
LEFT JOIN contractor cntr ON cntr.contractnumber = con.ContractNumber
LEFT JOIN sfu dasruler ON csa.ownerid = dasruler.id
LEFT JOIN sfu dassalesmgr ON dasruler.managerid = dassalesmgr.id
LEFT JOIN (
SELECT f.accountid
,g.managerid
,max(g.NAME) CSM
,max(g.id) CSMID
FROM sfatm f
JOIN sfu g ON f.userid = g.id
WHERE f.teammemberrole = 'AGM'
GROUP BY f.accountid
,g.managerid
) dasagm ON dasagm.accountid = csa.id
LEFT JOIN sfu csm_mgr ON dasagm.managerid = csm_mgr.id
LEFT JOIN (
SELECT f.accountid
,g.managerid
,max(g.NAME) PSM
,max(g.id) CSMID
FROM sfatm f
JOIN sfu g ON f.userid = g.id
WHERE f.teammemberrole = 'SDM'
GROUP BY f.accountid
,g.managerid
) dassdm ON dassdm.accountid = csa.id
LEFT JOIN sfu psm_mgr ON dassdm.managerid = psm_mgr.id
LEFT JOIN SFP prd ON prod.Code = prd.productcode
LEFT JOIN IPFam prod_fam ON prod_fam.product_family_desc = prd.Product_Family__c
WHERE cli.RateEffectiveStatus = 'A'
AND cli.STATUS = 'A'
AND cli.Active = 1
AND con.STATUS IN ('A')
AND CUST.STATUS = 'active'
AND prod.type <> 'KING'
AND csa.itac = 0
)
WHERE Qty_Purchased <> 0
);
Snowflake doesn't have a ROWNUM keyword as Oracle does.
If you want to use that functionality, you can generate an equivalent using the window function, row_number(). This would typically be done by inserting that window function into the bottom level of your query.
Related
Select only Records with Earliest duedate
I have tried following query, which is returning all lines for each STOCKCODE, where as I am only after record with earliest PurchOrd_Lines.Due Date SELECT PURCHORD_LINES.STOCKCODE, STOCK_ITEMS.DESCRIPTION, (X_FREE_STOCK_VW.PhysicalQty - X_FREE_STOCK_VW.CommittedQty) AS 'FREE STOCK', X_FREE_STOCK_VW.PhysicalQty AS 'On Hand', X_FREE_STOCK_VW.CommittedQty AS 'Committed', X_FREE_STOCK_VW.IncommingQty AS 'Purch_Ord', PURCHORD_LINES.HDR_SEQNO, (PURCHORD_LINES.ORD_QUANT-PURCHORD_LINES.SUP_QUANT) AS 'QTY', CONVERT(DATETIME, MIN(PURCHORD_LINES.DUEDATE), 103) AS 'ETA', PURCHORD_HDR.X_PURCHASEORDERREF AS 'Reference' FROM PURCHORD_LINES PURCHORD_LINES JOIN STOCK_ITEMS ON STOCK_ITEMS.STOCKCODE = PURCHORD_LINES.STOCKCODE JOIN X_FREE_STOCK_VW ON X_FREE_STOCK_VW.STOCKCODE = PURCHORD_LINES.STOCKCODE JOIN PURCHORD_HDR ON PURCHORD_HDR.SEQNO = PURCHORD_LINES.HDR_SEQNO WHERE X_FREE_STOCK_VW.LOCATION = 1 AND STOCK_ITEMS.STOCK_CLASSIFICATION IN (0,10,20,200,210,220) AND STOCK_ITEMS.STOCKCODE NOT LIKE '%2' AND STOCK_ITEMS.STOCKCODE NOT LIKE '%3' AND (X_FREE_STOCK_VW.PhysicalQty - X_FREE_STOCK_VW.CommittedQty) <= 0 AND X_FREE_STOCK_VW.CommittedQty > 0 AND LEN(STOCK_ITEMS.STOCKCODE) > 6 AND STOCK_ITEMS.DESCRIPTION IS NOT NULL AND STOCK_ITEMS.DESCRIPTION != '' AND STOCK_ITEMS.SUPPLIERNO IN (1009, 1024, 1068, 1115, 1146, 1170, 1259, 1306, 1410, 2768) AND STOCK_ITEMS.X_BUYER = 'P' AND ((PURCHORD_LINES.ORD_QUANT - PURCHORD_LINES.SUP_QUANT) > 0 AND (PURCHORD_LINES.SUP_QUANT/PURCHORD_LINES.ORD_QUANT) < 0.9) AND ((PURCHORD_HDR.STATUS <> 2) AND (PURCHORD_HDR.X_DELIVERYSTATUS <> 4) AND (PURCHORD_LINES.ORD_QUANT > 0)) GROUP BY PURCHORD_LINES.STOCKCODE, STOCK_ITEMS.DESCRIPTION, X_FREE_STOCK_VW.PhysicalQty, X_FREE_STOCK_VW.CommittedQty, X_FREE_STOCK_VW.IncommingQty, PURCHORD_LINES.HDR_SEQNO, PURCHORD_LINES.ORD_QUANT, PURCHORD_LINES.SUP_QUANT, PURCHORD_HDR.X_PURCHASEORDERREF Output is STOCKCODE| FREE STOCK |On Hand |Committed|Purch_Ord|HDR_SEQNO|QTY|ETA |Reference 42165 | -351 |-29 |322 |406 |106200 |84 |21/02/2020 |426/19 42165 | -351 |-29 |322 |406 |107052 |87 |20/03/2020 |454/19 42165 | -351 |-29 |322 |406 |107626 |150|11/04/2020 |024/20 42166 | -15 |41 |57 |406 |107626 |150|13/02/2020 |074/20 42166 | -15 |41 |57 |406 |107626 |150|17/02/2020 |089/20 WHEREAS I only need it to return the row with earliest date(ETA) for each stock code. What am doing wrong?
You can make use of row_number to achieve this with data as ( /*The original query*/ SELECT PURCHORD_LINES.STOCKCODE, STOCK_ITEMS.DESCRIPTION, (X_FREE_STOCK_VW.PhysicalQty - X_FREE_STOCK_VW.CommittedQty) AS 'FREE STOCK', X_FREE_STOCK_VW.PhysicalQty AS 'On Hand', X_FREE_STOCK_VW.CommittedQty AS 'Committed', X_FREE_STOCK_VW.IncommingQty AS 'Purch_Ord', PURCHORD_LINES.HDR_SEQNO, (PURCHORD_LINES.ORD_QUANT-PURCHORD_LINES.SUP_QUANT) AS 'QTY', CONVERT(DATETIME, MIN(PURCHORD_LINES.DUEDATE), 103) AS 'ETA', PURCHORD_HDR.X_PURCHASEORDERREF AS 'Reference' FROM PURCHORD_LINES PURCHORD_LINES JOIN STOCK_ITEMS ON STOCK_ITEMS.STOCKCODE = PURCHORD_LINES.STOCKCODE JOIN X_FREE_STOCK_VW ON X_FREE_STOCK_VW.STOCKCODE = PURCHORD_LINES.STOCKCODE JOIN PURCHORD_HDR ON PURCHORD_HDR.SEQNO = PURCHORD_LINES.HDR_SEQNO WHERE X_FREE_STOCK_VW.LOCATION = 1 AND STOCK_ITEMS.STOCK_CLASSIFICATION IN (0,10,20,200,210,220) AND STOCK_ITEMS.STOCKCODE NOT LIKE '%2' AND STOCK_ITEMS.STOCKCODE NOT LIKE '%3' AND (X_FREE_STOCK_VW.PhysicalQty - X_FREE_STOCK_VW.CommittedQty) <= 0 AND X_FREE_STOCK_VW.CommittedQty > 0 AND LEN(STOCK_ITEMS.STOCKCODE) > 6 AND STOCK_ITEMS.DESCRIPTION IS NOT NULL AND STOCK_ITEMS.DESCRIPTION != '' AND STOCK_ITEMS.SUPPLIERNO IN (1009,1024,1068,1115,1146,1170,1259,1306,1410,2768) AND STOCK_ITEMS.X_BUYER = 'P' AND ((PURCHORD_LINES.ORD_QUANT - PURCHORD_LINES.SUP_QUANT) > 0 AND (PURCHORD_LINES.SUP_QUANT/PURCHORD_LINES.ORD_QUANT)<0.9) AND ((PURCHORD_HDR.STATUS<>2) AND (PURCHORD_HDR.X_DELIVERYSTATUS<>4) AND (PURCHORD_LINES.ORD_QUANT>0)) GROUP BY PURCHORD_LINES.STOCKCODE , STOCK_ITEMS.DESCRIPTION , X_FREE_STOCK_VW.PhysicalQty , X_FREE_STOCK_VW.CommittedQty , X_FREE_STOCK_VW.IncommingQty , PURCHORD_LINES.HDR_SEQNO , PURCHORD_LINES.ORD_QUANT , PURCHORD_LINES.SUP_QUANT , PURCHORD_HDR.X_PURCHASEORDERREF ) ,interim_data as ( select *,row_number() over(partition by stockcode order by eta asc) as rnk from data ) select * from iterim_data where rnk=1
Maybe this way can help: SELECT ETA, * FROM (SELECT PURCHORD_LINES.STOCKCODE, CONVERT(DATETIME, MIN(PURCHORD_LINES.DUEDATE), 103) AS 'ETA' FROM PURCHORD_LINES PURCHORD_LINES GROUP BY PURCHORD_LINES.STOCKCODE ) as PURCHORD_ETA JOIN PURCHORD_LINES ON PURCHORD_LINES.STOCKCODE = PURCHORD_ETA.STOCKCODE JOIN ... WHERE ... GROUP BY ... Try Subqueries, it will be easier to understand
Division by zero in Laravel
I want to ask, Why can I use the first SQL command, the second fails? Note: Error occurs when data is empty Success $barang = KeluarTmp::LeftJoin('data_barang', function($join){ $join->on('data_barang.kode_barang','=','barang_keluar_tmp.kode'); })->leftjoin('data_jasa','barang_keluar_tmp.kode','=','data_jasa.kode_jasa') ->WHERE('barang_keluar_tmp.keterangan', $user) ->orderBy('barang_keluar_tmp.created_at','ASC') ->get(['barang_keluar_tmp.id as id', 'data_barang.nama_barang as nama_barang', 'barang_keluar_tmp.kode as kode_barang', 'barang_keluar_tmp.qty as jumlah', 'barang_keluar_tmp.total_harga as total_harga', 'barang_keluar_tmp.total_harga_awal as total_harga_awal', 'data_jasa.nama_jasa as nama_jasa', 'barang_keluar_tmp.diskon as diskon' ]); Error Devision Zero $barang = DB::select('SELECT barang_keluar_tmp.id as id, data_barang.nama_barang as nama_barang, barang_keluar_tmp.kode as kode_barang, barang_keluar_tmp.qty as jumlah, barang_keluar_tmp.total_harga as total_harga, barang_keluar_tmp.total_harga_awal as total_harga_awal, data_jasa.nama_jasa as nama_jasa, barang_keluar_tmp.diskon as diskon, SUM(h.masuk - (i.keluar + barang_keluar_tmp.qty)) as stok FROM barang_keluar_tmp JOIN data_barang on data_barang.kode_barang = barang_keluar_tmp.kode LEFT JOIN data_jasa on barang_keluar_tmp.kode = data_jasa.kode_jasa LEFT JOIN (SELECT barang_masuk.kode_barang, SUM(barang_masuk.qty) as masuk from barang_masuk group by barang_masuk.kode_barang) AS h ON barang_keluar_tmp.kode = h.kode_barang LEFT JOIN (SELECT barang_keluar.kode, SUM(barang_keluar.qty) as keluar from barang_keluar group by barang_keluar.kode) AS i ON barang_keluar_tmp.kode = i.kode WHERE barang_keluar_tmp.keterangan = "'.$user.'" ORDER By barang_keluar_tmp.created_at ASC');
use coalesce() on sum() SELECT barang_keluar_tmp.id as id , data_barang.nama_barang as nama_barang , barang_keluar_tmp.kode as kode_barang , barang_keluar_tmp.qty as jumlah , barang_keluar_tmp.total_harga as total_harga , barang_keluar_tmp.total_harga_awal as total_harga_awal , data_jasa.nama_jasa as nama_jasa, barang_keluar_tmp.diskon as diskon , SUM(coalesce(h.masuk, 0) - coalesce((i.keluar + barang_keluar_tmp.qty), 0)) as stok FROM barang_keluar_tmp JOIN data_barang on data_barang.kode_barang = barang_keluar_tmp.kode LEFT JOIN data_jasa on barang_keluar_tmp.kode = data_jasa.kode_jasa LEFT JOIN (SELECT barang_masuk.kode_barang , SUM(barang_masuk.qty) as masuk from barang_masuk group by barang_masuk.kode_barang) AS h ON barang_keluar_tmp.kode = h.kode_barang LEFT JOIN (SELECT barang_keluar.kode, SUM(barang_keluar.qty) as keluar from barang_keluar group by barang_keluar.kode) AS i ON barang_keluar_tmp.kode = i.kode WHERE barang_keluar_tmp.keterangan = "'.$user.'" ORDER By barang_keluar_tmp.created_at ASC
Nested in line view Add Column
I have to add a column to this report - the new column name is: uda_value_desc The code below will give me a result if I enter a PM_ITEM number, I need to insert the code into one of the in line views. Any help would be appreciated WITH item_temp AS (SELECT im.item ,uv.uda_value_desc uda_value_desc ----- FROM item_master im ,TABLE(mff_report.parse_strings(:PM_item)) t , uda_item_lov uil , uda_values uv WHERE t.Column_Value = uil.item and uil.UDA_ID = 511 and uv.uda_id = uil.uda_id and uv.uda_value = uil.uda_value and im.item = uil.item UNION ALL SELECT im.item ,null FROM item_master im ,TABLE(mff_report.parse_strings(:PM_item)) t WHERE t.COLUMN_VALUE = im.item_parent AND im.item_level = im.tran_level UNION ALL SELECT sd.item ,null FROM skulist_detail sd ,TABLE(mff_report.parse_strings(:PM_item_list)) t WHERE t.COLUMN_VALUE = sd.skulist UNION ALL SELECT ia.item ,null FROM mffecom.item_attr ia ,TABLE(mff_report.parse_strings(:PM_product_id)) t WHERE t.COLUMN_VALUE = ia.product_id UNION ALL SELECT im.item ,null FROM item_master im WHERE :PM_item IS NULL AND :PM_item_list IS NULL AND :PM_product_id IS NULL ) SELECT v_item.item_parent ,uda_value_desc ,v_item.item ,mff_report.mff_merch_sql.get_brand_name(v_item.item) brand_name ,v_item.item_desc ,v_selling.product_id ,v_product.product_web_desc ,v_product.product_template ,v_product.romance_copy ,v_selling.selling_point_1 ,v_selling.selling_point_2 ,v_selling.selling_point_3 ,v_selling.selling_point_4 ,v_selling.selling_point_5 ,v_selling.selling_point_6 ,v_selling.selling_point_7 ,v_selling.selling_point_8 ,v_selling.selling_point_9 ,v_selling.selling_point_10 ,v_selling.selling_point_11 ,v_selling.selling_point_12 ,v_selling.selling_point_13 ,v_selling.selling_point_14 ,v_selling.selling_point_15 ,v_selling.selling_point_16 ,v_item.vpn ,v_item.diff_1 ,v_item.diff1_desc ,v_item.diff_2 ,v_item.diff2_desc ,v_item.diff_3 ,v_item.diff3_desc ,v_item.diff_4 ,v_item.diff4_desc ,v_item.supplier ,v_item.sup_name ,v_product.code_desc fulfillment_method_desc ,v_product.air_ship_restrict ,v_product.do_not_freeze ,v_product.free_shipping ,v_product.refrigerate ,v_product.serial_reqd ,v_product.vaccination ,v_product.is_consumable ,v_product.zero_weight ,v_product.restrict_state ,v_product.no_of_alt_image ,v_product.product_status ,v_product.item_ecom_status ,TO_CHAR(v_product.deactivate_date, 'MM/DD/YYYY') product_deactivate_date ,TO_CHAR(v_product.product_activate_date, 'MM/DD/YYYY') product_activate_date ,TO_CHAR(v_product.item_activate_date, 'MM/DD/YYYY') item_activate_date ,TO_CHAR(v_product.item_deactivate_date, 'MM/DD/YYYY') item_deactivate_date ,v_product.prod_created_by ,TO_CHAR(v_product.prod_created_date, 'MM/DD/YYYY') prod_created_date ,v_product.prod_updated_by ,v_product.item_created_by ,TO_CHAR(v_product.item_created_date, 'MM/DD/YYYY') item_created_date ,v_product.item_updated_by ,v_item.delete_type purge ,v_item.dept ,v_item.class ,v_item.subclass ,mff_orders_sql.buyer_for_item(v_item.item) buyer ,mff_orders_sql.buyer_name_for_item(v_item.item) buyer_name ,v_item.soh ,v_item.length ,v_item.width ,v_item.height ,v_item.weight ,v_variant.variant_id1 ,v_variant.value_id1 ,v_variant.variant_id2 ,v_variant.value_id2 ,v_variant.variant_id3 ,v_variant.value_id3 ,v_variant.variant_id4 ,v_variant.value_id4 ,v_variant.variant_id5 ,v_variant.value_id5 ,v_variant.variant_id6 ,v_variant.value_id6 FROM (SELECT ia.item ,v_sell.product_id ,MIN(DECODE(row_num,1,selling_point)) selling_point_1 ,MIN(DECODE(row_num,2,selling_point)) selling_point_2 ,MIN(DECODE(row_num,3,selling_point)) selling_point_3 ,MIN(DECODE(row_num,4,selling_point)) selling_point_4 ,MIN(DECODE(row_num,5,selling_point)) selling_point_5 ,MIN(DECODE(row_num,6,selling_point)) selling_point_6 ,MIN(DECODE(row_num,7,selling_point)) selling_point_7 ,MIN(DECODE(row_num,8,selling_point)) selling_point_8 ,MIN(DECODE(row_num,9,selling_point)) selling_point_9 ,MIN(DECODE(row_num,10,selling_point)) selling_point_10 ,MIN(DECODE(row_num,11,selling_point)) selling_point_11 ,MIN(DECODE(row_num,12,selling_point)) selling_point_12 ,MIN(DECODE(row_num,13,selling_point)) selling_point_13 ,MIN(DECODE(row_num,14,selling_point)) selling_point_14 ,MIN(DECODE(row_num,15,selling_point)) selling_point_15 ,MIN(DECODE(row_num,16,selling_point)) selling_point_16 FROM mffecom.item_attr ia ,(SELECT sp.product_id ,row_number () OVER (PARTITION BY sp.product_id ORDER BY sp.selling_point_id) row_num ,sp.selling_point FROM mffecom.selling_point sp ORDER BY sp.product_id ,sp.selling_point) v_sell WHERE ia.product_id = v_sell.product_id GROUP BY ia.item ,v_sell.product_id) v_selling ,(SELECT NVL(im.item_parent,im.item) item_parent ,im.item ,im.item_desc ,im.dept ,im.class ,im.subclass ,isupp.supplier ,s.sup_name ,isupp.vpn ,miim.stock_on_hand soh ,iscd.length ,iscd.width ,iscd.height ,iscd.weight ,im.diff_1 ,di.diff_desc diff1_desc ,im.diff_2 ,di2.diff_desc diff2_desc ,im.diff_3 ,di3.diff_desc diff3_desc ,im.diff_4 ,di4.diff_desc diff4_desc ,dp.delete_type FROM item_supplier isupp ,sups s ,item_supp_country_dim iscd ,item_master im ,diff_ids di ,diff_ids di2 ,diff_ids di3 ,diff_ids di4 ,daily_purge dp ,merch_item_inv_mv miim WHERE isupp.item = im.item AND isupp.item = miim.item (+) AND isupp.supplier = s.supplier AND isupp.item = iscd.item AND isupp.supplier = iscd.supplier AND isupp.primary_supp_ind = 'Y' AND iscd.dim_object = 'EA' AND im.item_level = im.tran_level AND im.sellable_ind = 'Y' AND im.diff_1 = di.diff_id (+) AND im.diff_2 = di2.diff_id (+) AND im.diff_3 = di3.diff_id (+) AND im.diff_4 = di4.diff_id (+) AND im.item = dp.key_value (+)) v_item ,(SELECT ia.item ,pm.product_id ,pm.product_web_desc ,pm.template product_template ,pm.romance_copy ,ia.air_ship_restrict ,ia.do_not_freeze ,ia.free_shipping ,ia.refrigerate ,ia.serial_reqd ,ia.vaccination ,ia.is_consumable ,ia.zero_weight ,pm.no_of_alt_image ,pm.status product_status ,ia.status item_ecom_status ,pm.deactivate_date deactivate_date ,pm.activate_date product_activate_date ,ia.activate_date item_activate_date ,ia.deactivate_date item_deactivate_date ,pm.created_by prod_created_by ,pm.create_datetime prod_created_date ,pm.updated_by prod_updated_by ,ita.created_by item_created_by ,ita.create_date item_created_date ,ia.updated_by item_updated_by ,str.restrict_state ,cd.code_desc FROM MFFECOM.product_master pm ,MFFECOM.item_attr ia ,MFFECOM.ship_to_restrict str ,rms13.mff_brand mb ,rms13.item_attributes ita ,rms13.code_detail cd WHERE ia.product_id = pm.product_id AND ia.item = str.item (+) AND ia.item = ita.item (+) AND pm.brand_id = mb.brand_id (+) AND to_char(ia.fulfillment_method) = cd.code AND cd.code_type = 'EIFM') v_product ,(SELECT item ,product_id ,MIN(DECODE(row_num,1,variant_id)) variant_id1 ,MIN(DECODE(row_num,1,value_id)) value_id1 ,MIN(DECODE(row_num,2,variant_id)) variant_id2 ,MIN(DECODE(row_num,2,value_id)) value_id2 ,MIN(DECODE(row_num,3,variant_id)) variant_id3 ,MIN(DECODE(row_num,3,value_id)) value_id3 ,MIN(DECODE(row_num,4,variant_id)) variant_id4 ,MIN(DECODE(row_num,4,value_id)) value_id4 ,MIN(DECODE(row_num,5,variant_id)) variant_id5 ,MIN(DECODE(row_num,5,value_id)) value_id5 ,MIN(DECODE(row_num,6,variant_id)) variant_id6 ,MIN(DECODE(row_num,6,value_id)) value_id6 FROM (SELECT item ,product_id ,row_number () OVER (PARTITION BY item ORDER BY variant_id) row_num ,variant_id ,value_id FROM mffecom.item_variant) GROUP BY item ,product_id) v_variant ,item_temp it WHERE v_item.item = v_selling.item (+) AND v_item.item = v_product.item (+) AND v_item.item = v_variant.item (+) AND v_item.item = it.item AND v_item.supplier = NVL(:PM_supplier,v_item.supplier) AND (v_product.prod_created_by = :PM_prod_created_by OR :PM_prod_created_by IS NULL) AND (v_product.item_created_by = :PM_item_created_by OR :PM_item_created_by IS NULL) AND (v_product.prod_created_date BETWEEN :prod_created_date_start AND :prod_created_date_to OR :prod_created_date_start IS NULL) AND (v_product.item_created_date BETWEEN :item_created_date_start AND :item_created_date_to OR :item_created_date_start IS NULL) ORDER BY v_product.product_id
Faster Query Execution
I have 42 columns and 4 joins in my table. Execution needs 140 seconds, I want to reduce the time of execution. What to do? SELECT DISTINCT GR_ID, CONVERT(VARCHAR, GR_DT, 106) AS GRDate, GR_GN, GR_GID, GR_BS, GR_BN, GR_DC, GR_COP, GR_PA, GR_AR, GR_BG, GR_SM, GR_KG, GR_IN, GR_TS, CMLC_BC, CMLC_SC, CMLC_KG, CMLC_BL, CMBC_BC, CMBC_SC, CMBC_KG, CMBC_BL, GR_BRN, GR_BLC, GR_LEA, GR_ALF, GR_BTA, GR_PID, GR_UTS, GR_LR, CMGB_BC, CMGB_SC, CMGB_KG, CMGB_BL, CMGB_LR, GR_UPC, GR_UPT, GR_UTA, GR_TTA, GR_SPA, GR_SAR, GR_NR, ISNULL(ACK_ACK, 'NO') AS ACK_ACK FROM GR LEFT JOIN CMBC ON ( CMBC_ID = GR_GID ) AND ( CMBC_IID = GR_PID ) RIGHT JOIN CMLC ON ( CMLC_ID = GR_GID ) AND ( CMLC_IID = GR_PID ) RIGHT JOIN CMGB ON ( CMGB_ID = GR_GID ) AND ( CMGB_IID = GR_PID ) AND ( CMGB_TS = GR_UTS ) LEFT JOIN ACK ON ( ACK_GN = GR_GN ) AND ( ACK_GID = GR_GID ) ORDER BY GR_GN, GR_GID
Oracle query works in Toad Developer but not in .net application
This query works in Toad developer but not(wont return results) in an .net application in visual studio. Any clues why? The query work if I omit the line -- having sum(total_cust_cnt) >= NVL (:customers_out, 100) select d.region_nbr, pi.city, d.case_id, c.cause_desc cause, sum(total_cust_cnt) customers, d.total_duration_minutes from t_om_cause_of_trouble c, t_om_archive_hist_device d, t_om_archive_hist_loc l, t_om_pod_info pi where c.cause = d.cause_of_trouble and pi.city is not null and pi.total_cust_cnt > 0 and pi.company = l.company and pi.distribution_location = l.distribution_location_nbr and l.company = d.company and l.region_nbr = d.region_nbr and l.outage_system = d.outage_system and l.case_id = d.case_id and d.first_call_date_time >= :start_date and d.first_call_date_time <= :end_date and d.service_request_type = 'LGTS' and d.cause_of_trouble not in (select distinct cs.cause from t_om_cause_by_summary cs, t_om_cause_of_trouble c where summary_cause = 'ERROR' and cs.cause = c.cause) and d.device_type <> 'ERR' and d.total_duration_minutes >= 60 * NVL(:hours_out,4) and d.total_duration_minutes > 5 and d.total_customers_affected >= NVL (:customers_out, 100) and to_char(d.region_nbr) like :region_nbr group by d.region_nbr, pi.city, d.case_id, c.cause_desc, d.total_duration_minutes /* having sum(total_cust_cnt) >= NVL (:customers_out, 100) */ order by d.region_nbr, pi.city, d.case_id ) group by region_nbr, city, cause order by region_nbr, city, cause ) stats where r.region = stats.region_nbr )