Tweak SQL query help - sql
I have a big query as following, someone please tweak this query? i need to avoid this big group by ... :-)
SELECT COALESCE( SUM(total_retail), 0 ) total_retail,
COALESCE( SUM(meterial_sub_total), 0 ) meterial_sub_total,
COALESCE( MIN(po_template_group_by_code), 0 ) po_template_group_by_code,
COALESCE( MIN(po_template_sort_by_code), 0 ) po_template_sort_by_code
FROM
(
SELECT
COALESCE( CASE WHEN COALESCE(ihbol.valuation_method_code, pih.valuation_method_code, #default_valuation_method_code, 'i') IN ('r', 'i', 'l') THEN
COALESCE ( rmiretail.retail_price / rmiretail.unit_of_measure_quantity
/ COALESCE( uomcvrmi.atomic_conversion_factor * UOMrmi.factor, UOMrmi.factor ), 0 )
* poi.confirmed_quantity
* ( CASE WHEN poi.catch_weight_flag = 'y'
THEN ( poi.package_weight * COALESCE( uomcvpr.atomic_conversion_factor * UOMpr.factor, UOMpr.factor ) )
WHEN si.shipper_flag = 'y'
THEN ( meterial_data.linked_meterial_quantity * COALESCE( uomcvitm.atomic_conversion_factor * uomitm.factor, uomitm.factor ) )
ELSE ( COALESCE( uomcvpkg.atomic_conversion_factor * UOMpkg.factor, UOMpkg.factor ) )
END )
ELSE
NULL
END, 0 ) AS total_retail,
CASE WHEN MIN(s.rcv_using_po_default_cost_target_code) = 'p' AND MIN(po.status_code) <> 't'
THEN COALESCE( MIN(po.last_draft_total), 0 )
ELSE CASE WHEN meterial_data.linked_meterial_quantity IS NULL
THEN CASE WHEN poi.catch_weight_flag = 'y'
THEN COALESCE( poi.confirmed_quantity * poi.package_weight * spicost.net_supplier_price, 0 )
ELSE COALESCE( poi.confirmed_quantity * spicost.net_supplier_price, 0 )
END
ELSE 0
END
END AS meterial_sub_total
,po.po_template_group_by_code AS po_template_group_by_code
,po.po_template_sort_by_code AS po_template_sort_by_code
FROM purchase_order po
JOIN supplier s WITH (NOLOCK)
ON po.supplier_id = s.supplier_id
JOIN purchase_order_meterial poi WITH (NOLOCK)
ON po.purchase_order_id = poi.purchase_order_id
AND po.business_unit_id = poi.business_unit_id
JOIN supplier_meterial si WITH (NOLOCK)
ON poi.supplier_meterial_id = si.supplier_meterial_id
AND poi.supplier_id = si.supplier_id
JOIN supplier_packaged_meterial spi WITH (NOLOCK)
ON spi.supplier_meterial_id = si.supplier_meterial_id
AND spi.supplier_id = #supplier_id:int
JOIN unit_of_measure uompkg WITH (NOLOCK)
ON uompkg.unit_of_measure_id = spi.packaged_in_uom_id
JOIN merch_bu_spi_cost_list spicost WITH (NOLOCK)
ON spicost.business_unit_id = #bu_id:int
AND spicost.supplier_id = si.supplier_id
AND spicost.supplier_meterial_id = si.supplier_meterial_id
AND spicost.packaged_meterial_id = spi.packaged_meterial_id
LEFT OUTER JOIN
(
SELECT poi.supplier_meterial_id AS supplier_meterial_id,
si.meterial_id AS linked_meterial_id,
NULL AS linked_meterial_uom,
NULL AS linked_meterial_quantity
FROM purchase_order_meterial poi WITH (NOLOCK)
JOIN supplier_meterial si WITH (NOLOCK)
ON poi.supplier_meterial_id = si.supplier_meterial_id
WHERE poi.purchase_order_id = #po_id:int
AND poi.business_unit_id = #bu_id:int
UNION ALL
SELECT siil.supplier_meterial_id AS supplier_meterial_id,
siil.inventory_meterial_id AS linked_meterial_id,
siil.unit_of_measure_id AS linked_meterial_uom,
siil.inventory_meterial_quantity AS linked_meterial_quantity
FROM purchase_order_meterial poi WITH (NOLOCK)
JOIN supplier_inventory_meterial_list siil WITH (NOLOCK)
ON siil.supplier_id = #supplier_id:int
AND poi.supplier_meterial_id = siil.supplier_meterial_id
WHERE poi.purchase_order_id = #po_id:int
AND poi.business_unit_id = #bu_id:int
) meterial_data
ON meterial_data.supplier_meterial_id = si.supplier_meterial_id
LEFT OUTER JOIN meterial i
ON i.meterial_id = meterial_data.linked_meterial_id
LEFT OUTER JOIN meterial_hierarchy ih
ON ih.meterial_hierarchy_id = COALESCE(si.meterial_hierarchy_id, i.meterial_hierarchy_id)
LEFT OUTER JOIN meterial_hierarchy pih
ON ih.setstring LIKE pih.setstring + '%'
AND pih.meterial_hierarchy_level_id = #meterial_hierarchy_level_id
LEFT OUTER JOIN meterial_hierarchy_bu_override_list ihbol
ON ihbol.business_unit_id = #bu_id:int
AND ihbol.meterial_hierarchy_id = pih.meterial_hierarchy_id
LEFT OUTER JOIN retail_modified_meterial rmi WITH (NOLOCK)
ON meterial_data.linked_meterial_id = rmi.retail_meterial_id
AND rmi.retail_valuation_flag = 'y'
LEFT OUTER JOIN merch_bu_rmi_retail_list rmiretail WITH (NOLOCK)
ON rmiretail.retail_modified_meterial_id = rmi.retail_modified_meterial_id
AND rmiretail.business_unit_id = #bu_id:int
LEFT OUTER JOIN unit_of_measure uompr WITH (NOLOCK)
ON uompr.unit_of_measure_id = spi.priced_in_uom_id
LEFT OUTER JOIN unit_of_measure uomitm WITH (NOLOCK)
ON uomitm.unit_of_measure_id = meterial_data.linked_meterial_uom
LEFT OUTER JOIN unit_of_measure uomrmi WITH (NOLOCK)
ON uomrmi.unit_of_measure_id = rmi.unit_of_measure_id
LEFT OUTER JOIN meterial_uom_conversion uomcvitm WITH (NOLOCK)
ON meterial_data.linked_meterial_id = uomcvitm.meterial_id
AND uomitm.unit_of_measure_class_id = uomcvitm.unit_of_measure_class_id
LEFT OUTER JOIN meterial_uom_conversion uomcvrmi WITH (NOLOCK)
ON meterial_data.linked_meterial_id = uomcvrmi.meterial_id
AND uomrmi.unit_of_measure_class_id = uomcvrmi.unit_of_measure_class_id
LEFT OUTER JOIN meterial_uom_conversion uomcvpr WITH (NOLOCK)
ON uomcvpr.meterial_id = meterial_data.linked_meterial_id
AND uomcvpr.unit_of_measure_class_id = uompr.unit_of_measure_class_id
LEFT OUTER JOIN meterial_uom_conversion uomcvpkg WITH (NOLOCK)
ON uomcvpkg.meterial_id = meterial_data.linked_meterial_id
AND uomcvpkg.unit_of_measure_class_id = uompkg.unit_of_measure_class_id
WHERE po.purchase_order_id = #po_id:int
AND po.business_unit_id = #bu_id:int
GROUP BY poi.supplier_meterial_id, poi.confirmed_quantity, spicost.net_supplier_price,
meterial_data.linked_meterial_quantity,poi.catch_weight_flag,poi.package_weight,
ihbol.valuation_method_code, pih.valuation_method_code,rmiretail.retail_price,
rmiretail.unit_of_measure_quantity, uomcvrmi.atomic_conversion_factor, UOMrmi.factor,
UOMrmi.factor, uomcvpr.atomic_conversion_factor, UOMpr.factor, si.shipper_flag,
meterial_data.linked_meterial_quantity, uomcvitm.atomic_conversion_factor ,uomitm.factor,
uomitm.factor, uomcvpkg.atomic_conversion_factor,UOMpkg.factor, UOMpkg.factor,
po.po_template_group_by_code, po.po_template_sort_by_code
) resultTable
Try:
SELECT COALESCE( SUM(total_retail), 0 ) total_retail,
COALESCE( SUM(meterial_sub_total), 0 ) meterial_sub_total,
COALESCE( MIN(po_template_group_by_code), 0 ) po_template_group_by_code,
COALESCE( MIN(po_template_sort_by_code), 0 ) po_template_sort_by_code
FROM
(
SELECT
sum(COALESCE( CASE WHEN COALESCE(ihbol.valuation_method_code, pih.valuation_method_code, #default_valuation_method_code, 'i') IN ('r', 'i', 'l') THEN
COALESCE ( rmiretail.retail_price / rmiretail.unit_of_measure_quantity
/ COALESCE( uomcvrmi.atomic_conversion_factor * UOMrmi.factor, UOMrmi.factor ), 0 )
* poi.confirmed_quantity
* ( CASE WHEN poi.catch_weight_flag = 'y'
THEN ( poi.package_weight * COALESCE( uomcvpr.atomic_conversion_factor * UOMpr.factor, UOMpr.factor ) )
WHEN si.shipper_flag = 'y'
THEN ( meterial_data.linked_meterial_quantity * COALESCE( uomcvitm.atomic_conversion_factor * uomitm.factor, uomitm.factor ) )
ELSE ( COALESCE( uomcvpkg.atomic_conversion_factor * UOMpkg.factor, UOMpkg.factor ) )
END )
ELSE
NULL
END, 0 )) AS total_retail,
sum(CASE WHEN MIN(s.rcv_using_po_default_cost_target_code) = 'p' AND MIN(po.status_code) <> 't'
THEN COALESCE( MIN(po.last_draft_total), 0 )
ELSE CASE WHEN meterial_data.linked_meterial_quantity IS NULL
THEN CASE WHEN poi.catch_weight_flag = 'y'
THEN COALESCE( poi.confirmed_quantity * poi.package_weight * spicost.net_supplier_price, 0 )
ELSE COALESCE( poi.confirmed_quantity * spicost.net_supplier_price, 0 )
END
ELSE 0
END
END) AS meterial_sub_total
,po.po_template_group_by_code AS po_template_group_by_code
,po.po_template_sort_by_code AS po_template_sort_by_code
FROM purchase_order po
JOIN supplier s WITH (NOLOCK)
ON po.supplier_id = s.supplier_id
JOIN purchase_order_meterial poi WITH (NOLOCK)
ON po.purchase_order_id = poi.purchase_order_id
AND po.business_unit_id = poi.business_unit_id
JOIN supplier_meterial si WITH (NOLOCK)
ON poi.supplier_meterial_id = si.supplier_meterial_id
AND poi.supplier_id = si.supplier_id
JOIN supplier_packaged_meterial spi WITH (NOLOCK)
ON spi.supplier_meterial_id = si.supplier_meterial_id
AND spi.supplier_id = #supplier_id:int
JOIN unit_of_measure uompkg WITH (NOLOCK)
ON uompkg.unit_of_measure_id = spi.packaged_in_uom_id
JOIN merch_bu_spi_cost_list spicost WITH (NOLOCK)
ON spicost.business_unit_id = #bu_id:int
AND spicost.supplier_id = si.supplier_id
AND spicost.supplier_meterial_id = si.supplier_meterial_id
AND spicost.packaged_meterial_id = spi.packaged_meterial_id
LEFT OUTER JOIN
(
SELECT poi.supplier_meterial_id AS supplier_meterial_id,
si.meterial_id AS linked_meterial_id,
NULL AS linked_meterial_uom,
NULL AS linked_meterial_quantity
FROM purchase_order_meterial poi WITH (NOLOCK)
JOIN supplier_meterial si WITH (NOLOCK)
ON poi.supplier_meterial_id = si.supplier_meterial_id
WHERE poi.purchase_order_id = #po_id:int
AND poi.business_unit_id = #bu_id:int
UNION ALL
SELECT siil.supplier_meterial_id AS supplier_meterial_id,
siil.inventory_meterial_id AS linked_meterial_id,
siil.unit_of_measure_id AS linked_meterial_uom,
siil.inventory_meterial_quantity AS linked_meterial_quantity
FROM purchase_order_meterial poi WITH (NOLOCK)
JOIN supplier_inventory_meterial_list siil WITH (NOLOCK)
ON siil.supplier_id = #supplier_id:int
AND poi.supplier_meterial_id = siil.supplier_meterial_id
WHERE poi.purchase_order_id = #po_id:int
AND poi.business_unit_id = #bu_id:int
) meterial_data
ON meterial_data.supplier_meterial_id = si.supplier_meterial_id
LEFT OUTER JOIN meterial i
ON i.meterial_id = meterial_data.linked_meterial_id
LEFT OUTER JOIN meterial_hierarchy ih
ON ih.meterial_hierarchy_id = COALESCE(si.meterial_hierarchy_id, i.meterial_hierarchy_id)
LEFT OUTER JOIN meterial_hierarchy pih
ON ih.setstring LIKE pih.setstring + '%'
AND pih.meterial_hierarchy_level_id = #meterial_hierarchy_level_id
LEFT OUTER JOIN meterial_hierarchy_bu_override_list ihbol
ON ihbol.business_unit_id = #bu_id:int
AND ihbol.meterial_hierarchy_id = pih.meterial_hierarchy_id
LEFT OUTER JOIN retail_modified_meterial rmi WITH (NOLOCK)
ON meterial_data.linked_meterial_id = rmi.retail_meterial_id
AND rmi.retail_valuation_flag = 'y'
LEFT OUTER JOIN merch_bu_rmi_retail_list rmiretail WITH (NOLOCK)
ON rmiretail.retail_modified_meterial_id = rmi.retail_modified_meterial_id
AND rmiretail.business_unit_id = #bu_id:int
LEFT OUTER JOIN unit_of_measure uompr WITH (NOLOCK)
ON uompr.unit_of_measure_id = spi.priced_in_uom_id
LEFT OUTER JOIN unit_of_measure uomitm WITH (NOLOCK)
ON uomitm.unit_of_measure_id = meterial_data.linked_meterial_uom
LEFT OUTER JOIN unit_of_measure uomrmi WITH (NOLOCK)
ON uomrmi.unit_of_measure_id = rmi.unit_of_measure_id
LEFT OUTER JOIN meterial_uom_conversion uomcvitm WITH (NOLOCK)
ON meterial_data.linked_meterial_id = uomcvitm.meterial_id
AND uomitm.unit_of_measure_class_id = uomcvitm.unit_of_measure_class_id
LEFT OUTER JOIN meterial_uom_conversion uomcvrmi WITH (NOLOCK)
ON meterial_data.linked_meterial_id = uomcvrmi.meterial_id
AND uomrmi.unit_of_measure_class_id = uomcvrmi.unit_of_measure_class_id
LEFT OUTER JOIN meterial_uom_conversion uomcvpr WITH (NOLOCK)
ON uomcvpr.meterial_id = meterial_data.linked_meterial_id
AND uomcvpr.unit_of_measure_class_id = uompr.unit_of_measure_class_id
LEFT OUTER JOIN meterial_uom_conversion uomcvpkg WITH (NOLOCK)
ON uomcvpkg.meterial_id = meterial_data.linked_meterial_id
AND uomcvpkg.unit_of_measure_class_id = uompkg.unit_of_measure_class_id
WHERE po.purchase_order_id = #po_id:int
AND po.business_unit_id = #bu_id:int
GROUP BY po.po_template_group_by_code, po.po_template_sort_by_code
) resultTable
I think it should return the same results as the query above, although whether those results are what you actually want is a different matter...
Related
SQL Query to provide a count of rows on sales order
Hoping you can help. We have an app that displays a grid. We can add custom fields to the grid using subqueries with which I am struggling. The main grid query looks like this. SELECT TOP 300000 '' AS alloc_status ,'' AS stock_status ,wo_description ,wo_quantity ,wo_number ,wo_pwos_id ,vad_variant_code ,oh_order_number ,oh_datetime ,ohd_dm_id ,ohd_customer_name ,vad_description AS vad_description_Condition ,vad_variant_code AS vad_variant_code_Condition ,wo_id AS key_id FROM works_order LEFT OUTER JOIN works_order_analysis ON works_order_analysis.woa_wo_id = works_order.wo_id LEFT OUTER JOIN works_order_process ON works_order_process.wop_id = works_order.wo_current_wop_id LEFT OUTER JOIN works_order_process_analysis ON works_order_process_analysis.wopa_wop_id = works_order_process.wop_id INNER JOIN variant_detail ON variant_detail.vad_id = works_order.wo_vad_id LEFT OUTER JOIN works_order_total ON works_order.wo_id = works_order_total.wot_wo_id LEFT JOIN order_line_item ON oli_id = wo_oli_id LEFT JOIN order_header ON oh_id = oli_oh_id LEFT JOIN job_number ON jn_id = wo_jn_id LEFT JOIN works_order_process_subcontract_analysis ON wopsa_wop_id = wop_id LEFT JOIN order_header_detail ON ohd_oh_id = oh_id LEFT JOIN customer_detail ON cd_id = oh_cd_id WHERE ((cd_ow_account = 'NOTHS') AND (wo_pwos_id = 1) OR (cd_ow_account = 'EBAY') AND (wo_pwos_id = 1) OR (cd_ow_account = '4008') AND (wo_pwos_id = 1) OR (cd_ow_account = 'TRUSCA') AND (wo_pwos_id = 1)) AND ((wo_required_datetime <= '2016-12-24 23:59:59' OR wo_required_datetime IS NULL) AND (wo_wos_id <> 4) AND (wo_kit = 0)) The subquery is to basically provide a column that looks at the sales order and returns a count of row within that order. When I do this I get the following: There was a problem retrieving the data: subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, < etc or when the subquery is used as an expression Below is the query complete with subquery. If anyone can help that would be amazing SELECT TOP 300000 '' AS alloc_status ,'' AS stock_status ,wo_description ,wo_quantity ,wo_number ,wo_pwos_id ,vad_variant_code ,oh_order_number ,oh_datetime ,ohd_dm_id ,ohd_customer_name ,(SELECT COUNT(order_line_item.oli_id) AS 'Count' FROM dbo.order_line_item INNER JOIN dbo.order_header ON order_line_item.oli_oh_id = order_header.oh_id INNER JOIN dbo.variant_detail ON order_line_item.oli_vad_id = variant_detail.vad_id INNER JOIN dbo.variant_setting ON variant_setting.vas_vad_id = variant_detail.vad_id WHERE variant_setting.vas_manufactured_variant = 1 GROUP BY order_header.oh_order_number) AS CustomLineCount ,vad_description AS vad_description_Condition ,vad_variant_code AS vad_variant_code_Condition ,wo_id AS key_id FROM works_order LEFT OUTER JOIN works_order_analysis ON works_order_analysis.woa_wo_id = works_order.wo_id LEFT OUTER JOIN works_order_process ON works_order_process.wop_id = works_order.wo_current_wop_id LEFT OUTER JOIN works_order_process_analysis ON works_order_process_analysis.wopa_wop_id = works_order_process.wop_id INNER JOIN variant_detail ON variant_detail.vad_id = works_order.wo_vad_id LEFT OUTER JOIN works_order_total ON works_order.wo_id = works_order_total.wot_wo_id LEFT JOIN order_line_item ON oli_id = wo_oli_id LEFT JOIN order_header ON oh_id = oli_oh_id LEFT JOIN job_number ON jn_id = wo_jn_id LEFT JOIN works_order_process_subcontract_analysis ON wopsa_wop_id = wop_id LEFT JOIN order_header_detail ON ohd_oh_id = oh_id LEFT JOIN customer_detail ON cd_id = oh_cd_id WHERE ((cd_ow_account = 'NOTHS') AND (wo_pwos_id = 1) OR (cd_ow_account = 'EBAY') AND (wo_pwos_id = 1) OR (cd_ow_account = '4008') AND (wo_pwos_id = 1) OR (cd_ow_account = 'TRUSCA') AND (wo_pwos_id = 1)) AND ((wo_required_datetime <= '2016-12-24 23:59:59' OR wo_required_datetime IS NULL) AND (wo_wos_id <> 4) AND (wo_kit = 0))
Try the below query, it may helps you SELECT TOP 300000 '' AS alloc_status ,'' AS stock_status ,wo_description ,wo_quantity ,wo_number ,wo_pwos_id ,vad_variant_code ,oh_order_number ,oh_datetime ,ohd_dm_id ,ohd_customer_name ,(SELECT COUNT(order_line_item.oli_id) AS 'Count' FROM dbo.order_line_item INNER JOIN dbo.order_header ON order_line_item.oli_oh_id = order_header.oh_id INNER JOIN dbo.variant_detail ON order_line_item.oli_vad_id = variant_detail.vad_id INNER JOIN dbo.variant_setting ON variant_setting.vas_vad_id = variant_detail.vad_id WHERE variant_setting.vas_manufactured_variant = 1 and order_header.oh_order_number=ordhead.oh_order_number) AS CustomLineCount ,vad_description AS vad_description_Condition ,vad_variant_code AS vad_variant_code_Condition ,wo_id AS key_id FROM works_order LEFT OUTER JOIN works_order_analysis ON works_order_analysis.woa_wo_id = works_order.wo_id LEFT OUTER JOIN works_order_process ON works_order_process.wop_id = works_order.wo_current_wop_id LEFT OUTER JOIN works_order_process_analysis ON works_order_process_analysis.wopa_wop_id = works_order_process.wop_id INNER JOIN variant_detail ON variant_detail.vad_id = works_order.wo_vad_id LEFT OUTER JOIN works_order_total ON works_order.wo_id = works_order_total.wot_wo_id LEFT JOIN order_line_item ON oli_id = wo_oli_id LEFT JOIN order_header ordhead ON oh_id = oli_oh_id LEFT JOIN job_number ON jn_id = wo_jn_id LEFT JOIN works_order_process_subcontract_analysis ON wopsa_wop_id = wop_id LEFT JOIN order_header_detail ON ohd_oh_id = oh_id LEFT JOIN customer_detail ON cd_id = oh_cd_id WHERE ((cd_ow_account = 'NOTHS') AND (wo_pwos_id = 1) OR (cd_ow_account = 'EBAY') AND (wo_pwos_id = 1) OR (cd_ow_account = '4008') AND (wo_pwos_id = 1) OR (cd_ow_account = 'TRUSCA') AND (wo_pwos_id = 1)) AND ((wo_required_datetime <= '2016-12-24 23:59:59' OR wo_required_datetime IS NULL) AND (wo_wos_id <> 4) AND (wo_kit = 0))
Change your sub query to this: (SELECT COUNT(order_line_item.oli_id) AS 'Count' FROM dbo.order_line_item INNER JOIN dbo.order_header ON order_line_item.oli_oh_id = order_header.oh_id INNER JOIN dbo.variant_detail ON order_line_item.oli_vad_id = variant_detail.vad_id INNER JOIN dbo.variant_setting ON variant_setting.vas_vad_id = variant_detail.vad_id WHERE variant_setting.vas_manufactured_variant = 1 AND order_header.oh_order_number = OUTER_QUERY_TABLE.SAME_FIELD ) I've added this line: AND order_header.oh_order_number = OUTER_QUERY_TABLE.SAME_FIELD You have to make this query correlated , so add the condition to match the record to the outer query . I didn't know which field it is. You could also optimize your WHERE and make it more readable with IN() : WHERE wo_pwos_id = 1 AND cd_ow_account IN('NOTHS','EBAY','4008','TRUSCA') AND (wo_required_datetime <= '2016-12-24 23:59:59' OR wo_required_datetime IS NULL) AND wo_wos_id <> 4 AND wo_kit = 0
Getting a second query as a field in a first one
I'm fairly new to writing queries and I'm struggling with getting the next to queries combined: SELECT od.ODCode , c.Description as 'Line Position' , ps.Description as 'Pallet Stacking' , pt.Description as 'Pallet Type' , odex.PalletRows , odex.PalletTypeID ,CONCAT(( SELECT sp.SpecPropertyValue FROM SpecificationProperty sp INNER JOIN specificationclass sc ON sc.specclassid = sp.specclassid INNER JOIN specificationcode sco ON sco.specclassid = sc.specclassid and sco.speccodeid = pt.pallettypeid INNER JOIN SpecificationClassProperty scp ON scp.specClassid = sp.specclassid and scp.specpropertyid = sp.specpropertyid and sco.speccodeid = sp.speccodeid WHERE scp.specpropertyname = 'DocDir'and sc.specclassname = 'Pallettypedoc' ), (SELECT sp.SpecPropertyValue FROM SpecificationProperty sp INNER JOIN specificationclass sc ON sc.specclassid = sp.specclassid INNER JOIN specificationcode sco ON sco.specclassid = sc.specclassid and sco.speccodeid = pt.pallettypeid INNER JOIN SpecificationClassProperty scp ON scp.specClassid = sp.specclassid and scp.specpropertyid = sp.specpropertyid and sco.speccodeid = sp.speccodeid WHERE scp.specpropertyname = 'Documentname'and sc.specclassname = 'Pallettypedoc' )) AS Spec FROM ODExitPallet odex INNER JOIN OperationDescr od ON od.OperationDescrID=odex.OperationDescrID INNER JOIN PalletStacking ps ON ps.PalletStackingID=odex.PalletStackingID INNER JOIN PalletType pt ON pt.PalletTypeID=odex.PalletTypeID INNER JOIN Code c on c.CodeNumber=odex.LinePosition and c.CodeTypeID=72 INNER JOIN WorkOrder wo on wo.OperationDescrID=odex.OperationDescrID WHERE wo.WorkOrderID = #WorkOrderID and SELECT SUM(PlannedBatch) / SUM(NominalBlanks * Stacks) as NrOfPallets FROM (SELECT WO.PlannedBatch, WO.NominalBlanks, ODEP.OperationDescrID, LinePosition, Case when COUNT(*) = 0 then 1 else COUNT(*) end as Stacks FROM WorkOrder Wo INNER JOIN ODExitPallet ODEX ON WO.operationDescrID = ODEX.OperationDescrID INNER JOIN Stacking ST ON ST.PalletStackingID = ODEX.PalletStackingID WHERE WO.WorkOrderID = #WorkOrderID GROUP BY PlannedBatch, NominalBlanks, ODEX.OperationDescrID, LinePosition ) TOTAL So I want to add the second query as a field in my first one. I've tried it with numerous thing like parentheses and stuff but I keep getting errors. Can someone enlighten me?
insert ( ) in whole second Query but make sure you second query return only 1 row SELECT od.ODCode , c.Description as 'Line Position' , ps.Description as 'Pallet Stacking' , pt.Description as 'Pallet Type' , odex.PalletRows , odex.PalletTypeID ,CONCAT( ( SELECT sp.SpecPropertyValue FROM SpecificationProperty sp INNER JOIN specificationclass sc ON sc.specclassid = sp.specclassid INNER JOIN specificationcode sco ON sco.specclassid = sc.specclassid and sco.speccodeid = pt.pallettypeid INNER JOIN SpecificationClassProperty scp ON scp.specClassid = sp.specclassid and scp.specpropertyid = sp.specpropertyid and sco.speccodeid = sp.speccodeid WHERE scp.specpropertyname = 'DocDir'and sc.specclassname = 'Pallettypedoc' ) , ( SELECT sp.SpecPropertyValue FROM SpecificationProperty sp INNER JOIN specificationclass sc ON sc.specclassid = sp.specclassid INNER JOIN specificationcode sco ON sco.specclassid = sc.specclassid and sco.speccodeid = pt.pallettypeid INNER JOIN SpecificationClassProperty scp ON scp.specClassid = sp.specclassid and scp.specpropertyid = sp.specpropertyid and sco.speccodeid = sp.speccodeid WHERE scp.specpropertyname = 'Documentname'and sc.specclassname = 'Pallettypedoc' ) ) AS Spec ,( SELECT SUM(PlannedBatch) / SUM(NominalBlanks * Stacks) FROM ( SELECT WO.PlannedBatch, WO.NominalBlanks, ODEP.OperationDescrID, LinePosition, Case when COUNT(*) = 0 then 1 else COUNT(*) end as Stacks FROM WorkOrder Wo INNER JOIN ODExitPallet ODEX ON WO.operationDescrID = ODEX.OperationDescrID INNER JOIN Stacking ST ON ST.PalletStackingID = ODEX.PalletStackingID WHERE WO.WorkOrderID = #WorkOrderID GROUP BY PlannedBatch, NominalBlanks, ODEX.OperationDescrID, LinePosition ) TOTAL ) AS [NrOfPallets] FROM ODExitPallet odex INNER JOIN OperationDescr od ON od.OperationDescrID=odex.OperationDescrID INNER JOIN PalletStacking ps ON ps.PalletStackingID=odex.PalletStackingID INNER JOIN PalletType pt ON pt.PalletTypeID=odex.PalletTypeID INNER JOIN Code c on c.CodeNumber=odex.LinePosition and c.CodeTypeID=72 INNER JOIN WorkOrder wo on wo.OperationDescrID=odex.OperationDescrID WHERE wo.WorkOrderID = #WorkOrderID
How to optimize left join subqueries in oracle
I would like to optimize a query with so many left join sub queries.See my query; SELECT DISTINCT pi.proforma_no, m.vv_cd, m.pid, bl.bill_lading_nbr, bld.cntr_nbr, NVL(ts.quantity, bld.quantity) AS quantity, vsc.vsl_nm, vsc.in_voy_nbr, m.rec_status, bld.idx_no, bld.colli_type, bld.volume, bld.gross_weight_kgs, bld.has_heavy_lift, NVL(NVL(pi.fa,pi.consignee),NVL(bld.cust_tariff_client,NVL(bl.fa,bl.consignee))) AS client, col.is_pos, col.cargo_type, bld.direct_delivery, cn.cntr_seq_nbr, bld.package_type_cd, bld.cargo_dtl_desc, NVL(ts.quantity, bld.quantity) AS quantity, bld.weight, bld.t1, bl.pload AS port_code, bld.purpose, bld.volume, bld.GROSS_WEIGHT_KGS, pi.WAIVE_DOC_FEE, pi.WAIVE_DOC_FEE_REMARKS, m.pid || '=' || trim(bl.bill_lading_nbr) || '=' || bld.idx_no || '=' || trim(bld.cntr_nbr) AS unique_key, DECODE(NVL(bld.CUST_TARIFF_CLIENT,''),'', DECODE('N','N',DECODE(tariff.is_metric_ton,'Y',tariff.local_rate *bld.weight,tariff.local_rate*bld.quantity), NVL(DECODE(ext_tariff_toStd.is_metric_ton,'Y',ext_tariff_toStd.local_rate*bld.weight,ext_tariff_toStd.local_rate*bld.quantity),0)), DECODE('N','N',DECODE(custTar.is_metric_ton,'Y',custTar.local_rate*bld.weight,custTar.local_rate*bld.quantity),0)) AS local_rate, DECODE(NVL(bld.CUST_TARIFF_CLIENT,''),'', DECODE('N','N',DECODE(tariff.is_metric_ton,'Y',tariff.global_rate *bld.weight,tariff.global_rate*bld.quantity), NVL(DECODE(ext_tariff_toStd.is_metric_ton,'Y',ext_tariff_toStd.global_rate*bld.weight,ext_tariff_toStd.global_rate*bld.quantity),0)), DECODE('N','N',DECODE(custTar.is_metric_ton,'Y',custTar.global_rate*bld.weight,custTar.global_rate*bld.quantity),0)) AS global_rate, DECODE(NVL(bld.CUST_TARIFF_CLIENT,''),'', DECODE('N','N',tariff.version_nbr,DECODE(col.tariff_ext_cost_id,NULL,0,NVL(ext_tariff_toStd.version_nbr,NVL(ext_tariff.version_nbr,tariff.version_nbr)))), -1) AS version_nbr, DECODE(NVL(bld.CUST_TARIFF_CLIENT,''),'', DECODE('N','N',tariff.id,DECODE(col.tariff_ext_cost_id,NULL,0,NVL(ext_tariff_toStd.id,NVL(ext_tariff.id,tariff.id)))), -1) AS tariff_id, DECODE(NVL(bld.CUST_TARIFF_CLIENT,''),'', DECODE('N','N',0,(NVL(DECODE(ext_tariff.is_metric_ton,'Y',ext_tariff.local_rate *bld.weight,ext_tariff.local_rate*bld.quantity),0))), 0) AS local_ext_amount, DECODE(NVL(bld.CUST_TARIFF_CLIENT,''),'', DECODE('N','N',0,(NVL(DECODE(ext_tariff.is_metric_ton,'Y',ext_tariff.global_rate *bld.weight,ext_tariff.global_rate*bld.quantity),0))), 0) AS global_ext_amount, (NVL(ts.quantity, bld.quantity) *NVL(disch.local_amount,0)) + DECODE(col.is_pos,'Y',DECODE(NVL(pos.local_amount,0),0,0,(bld.weight*pos.local_amount)),0) + DECODE(col.is_pos_add_rate,'Y',DECODE(bld.weight,0,0,NVL(addPos.local_amount,0)),0) AS local_other_amount, (NVL(ts.quantity, bld.quantity) *NVL(disch.global_amount,0)) + DECODE(col.is_pos,'Y',DECODE(NVL(pos.global_amount,0),0,0,(bld.weight*pos.global_amount)),0) + DECODE(col.is_pos_add_rate,'Y',DECODE(bld.weight,0,0,NVL(addPos.global_amount,0)),0) AS global_other_amount, NVL(doc.local_amount,0) + (DECODE(SIGN(ROUND(ROUND(to_number(spTax.param_value)/100,2)*NVL(doc.local_amount,0),2)-ROUND(ROUND(to_number(spTax.param_value)/100,2)*NVL(doc.local_amount,0),0)-0.05),-1, ROUND(ROUND(to_number(spTax.param_value)/100,2)*NVL(doc.local_amount,0),0)+0.05, ROUND(ROUND(to_number(spTax.param_value)/100,2)*NVL(doc.local_amount,0),0))) AS local_doc_amount, NVL(doc.global_amount,0) + (DECODE(SIGN(ROUND(ROUND(to_number(spTax.param_value)/100,2)*NVL(doc.global_amount,0),2)-ROUND(ROUND(to_number(spTax.param_value)/100,2)*NVL(doc.global_amount,0),0)-0.05),-1, ROUND(ROUND(to_number(spTax.param_value)/100,2)*NVL(doc.global_amount,0),0)+0.05, ROUND(ROUND(to_number(spTax.param_value)/100,2)*NVL(doc.global_amount,0),0))) AS global_doc_amount, (NVL(ts.quantity, bld.quantity) *NVL(disch.local_amount,0)) AS local_disch_amount, DECODE(col.is_pos,'Y',DECODE(NVL(pos.local_amount,0),0,0,(bld.weight *pos.local_amount)),0) + DECODE(col.is_pos_add_rate,'Y',DECODE(bld.weight,0,0,NVL(addPos.local_amount,0)),0) AS local_pos_amount, (NVL(ts.quantity, bld.quantity) *NVL(disch.global_amount,0)) AS global_disch_amount, DECODE(col.is_pos,'Y',DECODE(NVL(pos.global_amount,0),0,0,(bld.weight *pos.global_amount)),0) + DECODE(col.is_pos_add_rate,'Y',DECODE(bld.weight,0,0,NVL(addPos.global_amount,0)),0) AS global_pos_amount, NVL(doc.local_amount,0) AS local_pure_doc_amount, NVL(doc.global_amount,0) AS global_pure_doc_amount, DECODE(NVL(bld.CUST_TARIFF_CLIENT,''),'', DECODE('N','N',tariff.local_rate, NVL(ext_tariff_toStd.local_rate,0)), DECODE('N','N',custTar.local_rate,0)) AS tariff_local_rate, DECODE(NVL(bld.CUST_TARIFF_CLIENT,''),'', DECODE('N','N',tariff.global_rate, NVL(ext_tariff_toStd.global_rate,0)), DECODE('N','N',custTar.global_rate,0)) AS tariff_global_rate, DECODE(pi.proforma_no, NULL, 'N', DECODE(bld.is_paid,'N',DECODE(pi.proforma_no,NULL,'N',DECODE(pi.is_special,'Y','SP','UP')),bld.is_paid)) AS bld_status, tariff.remark, col.is_std_cargo, DECODE(NVL(bld.CUST_TARIFF_CLIENT,''),'',DECODE('N','N',tariff.serv_id ||NVL(ext_tariff_toStd.serv_id,''),ext_tariff.serv_id),custTar.serv_id) AS serv_id FROM manifest m INNER JOIN vessel_call vsc ON vsc.vv_cd = m.vv_cd LEFT JOIN vessel_event ve ON ve.vv_cd = vsc.vv_cd INNER JOIN bl ON bl.pid = m.pid AND bl.transfer_status = 'N' INNER JOIN bl_dtl bld ON bld.pid = m.pid AND bld.is_paid = 'N' AND bld.bill_lading_nbr = bl.bill_lading_nbr LEFT JOIN tally_sheet ts ON ts.manifest_pid = m.pid AND trim(upper(ts.bill_lading_nbr)) = trim(upper(bl.bill_lading_nbr)) AND ts.cargo_idx_no = bld.idx_no AND trim(upper(ts.cntr_nbr)) = trim(upper(bld.cntr_nbr)) INNER JOIN colli col ON trim(col.colli_code) = trim(bld.colli_type) LEFT JOIN (SELECT pi.*, pid.bill_lading_nbr, pid.cntr_no FROM proforma_invoice_dtl pid, proforma_invoice pi WHERE pid.proforma_no = pi.proforma_no AND pi.reversal_proforma IS NULL AND pid.quantity >= 0 AND pid.total_global_amount >=0 AND pid.reversal_proforma IS NULL ) pi ON pi.bill_lading_nbr = bld.bill_lading_nbr AND pi.cntr_no = bld.cntr_nbr AND pi.vv_cd = m.vv_cd LEFT JOIN system_parameter spTax ON spTax.param_cd = 'SAF_VAT' LEFT JOIN (SELECT NVL(serv.local_amount,0) AS local_rate, NVL(serv.global_amount,0) AS global_rate, tar.id, tar.is_metric_ton, tar.version_nbr, tver.eff_start_dttm, tar.remark, serv.id AS serv_id FROM tariffs tar INNER JOIN tariff_details tardet ON tardet.tariff_id = tar.id INNER JOIN services serv ON serv.id = tardet.service_id INNER JOIN tariff_version tver ON tver.version_nbr = tar.version_nbr AND serv.service_type NOT IN ('C','R','L','D','DG') AND serv.rec_status = 'A' WHERE tar.rec_status = 'A' ORDER BY tver.eff_start_dttm DESC ) tariff ON tariff.id = tariff_end_date(NVL(ve.atb,vsc.vsl_eta_dttm),DECODE(bld.purpose,'TS1W',col.TARIFF_1WAYTRANS_ID,'TS2W',col.TARIFF_2WAYTRANS_ID,col.tariff_dischg_id)) LEFT JOIN (SELECT NVL(serv.local_amount,0) AS local_rate, NVL(serv.global_amount,0) AS global_rate, tar.id, tar.is_metric_ton, tar.version_nbr, tver.eff_start_dttm, serv.id AS serv_id FROM tariffs tar INNER JOIN tariff_details tardet ON tardet.tariff_id = tar.id INNER JOIN tariff_version tver ON tver.version_nbr = tar.version_nbr INNER JOIN services serv ON serv.id = tardet.service_id AND serv.service_type NOT IN ('C','R','L','D','DG') AND serv.rec_status = 'A' WHERE tar.rec_status = 'A' ORDER BY tver.eff_start_dttm DESC ) ext_tariff_toStd ON ext_tariff_toStd.id = col.tariff_ext_cost_id LEFT JOIN (SELECT NVL(serv.local_amount,0) AS local_rate, NVL(serv.global_amount,0) AS global_rate, tar.id, tar.is_metric_ton, tar.version_nbr, tver.eff_start_dttm, serv.id AS serv_id, tardet.usage FROM tariffs tar INNER JOIN tariff_details tardet ON tardet.tariff_id = tar.id INNER JOIN tariff_version tver ON tver.version_nbr = tar.version_nbr INNER JOIN services serv ON serv.id = tardet.service_id AND serv.service_type IN ('C','R','L','DG') AND serv.rec_status = 'A' WHERE tar.rec_status = 'A' ORDER BY tver.eff_start_dttm DESC ) ext_tariff ON ((ext_tariff.id = col.tariff_ext_cost_id AND NVL(ext_tariff.usage,'%') LIKE '%' ||bld.purpose ||'%') OR ext_tariff.id = tariff_end_date(NVL(ve.atb,vsc.vsl_eta_dttm),DECODE(bld.purpose,'TS1W',col.TARIFF_1WAYTRANS_ID,'TS2W',col.TARIFF_2WAYTRANS_ID,col.tariff_dischg_id))) LEFT JOIN (SELECT custTar.EFFECTIVE_DTTM, bld.bill_lading_nbr, bld.cntr_nbr, DECODE(NVL(DECODE(bld.purpose,'TS2W',custTar.tariff_2waytrans_amt,'TS1W',custTar.tariff_1waytrans_amt,custTar.tariff_disch_amt),0),0,local_rate,DECODE(bld.purpose,'TS2W',custTar.tariff_2waytrans_amt,'TS1W',custTar.tariff_1waytrans_amt,custTar.tariff_disch_amt)) AS local_rate, DECODE(NVL(DECODE(bld.purpose,'TS2W',custTar.tariff_2waytrans_amt,'TS1W',custTar.tariff_1waytrans_amt,custTar.tariff_disch_amt),0),0,global_rate,DECODE(bld.purpose,'TS2W',custTar.tariff_2waytrans_amt,'TS1W',custTar.tariff_1waytrans_amt,custTar.tariff_disch_amt)) AS global_rate, custTar.id, DECODE(bld.purpose,'TS2W',NVL(custTar.tariff_2waytrans_mton,is_metric_ton), 'TS1W',NVL(custTar.tariff_1waytrans_mton,is_metric_ton), NVL(custTar.tariff_disch_mton,is_metric_ton)) AS is_metric_ton, version_nbr, cust_tariff_val.serv_id FROM customized_tariff custTar INNER JOIN vessel_call vsc ON upper(vsc.vsl_nm) LIKE '%' || trim(upper(NVL('EURPCARGO VENEZIA',''))) || '%' AND vsc.in_voy_nbr = trim(upper(NVL('14120502',''))) OR vsc.vv_cd = trim(NVL('2014000433','')) INNER JOIN manifest m ON m.vv_cd = NVL(vsc.vv_cd,'') INNER JOIN bl_dtl bld ON bld.cust_tariff_client = custTar.client_code AND bld.pid = m.pid INNER JOIN customized_tariff_dtl custTarDtl ON custTarDtl.cust_tar_id = custTar.id AND trim(custTarDtl.colli_code) = bld.colli_type LEFT JOIN (SELECT NVL(serv.local_amount,0) AS local_rate, NVL(serv.global_amount,0) AS global_rate, tar.id, tar.is_metric_ton, tar.version_nbr, tver.eff_start_dttm, serv.id AS serv_id FROM tariffs tar INNER JOIN tariff_details tardet ON tardet.tariff_id = tar.id INNER JOIN tariff_version tver ON tver.version_nbr = tar.version_nbr INNER JOIN services serv ON serv.id = tardet.service_id AND serv.rec_status = 'A' WHERE tar.rec_status = 'A' ORDER BY tver.eff_start_dttm DESC ) cust_tariff_val ON cust_tariff_val.id = DECODE(bld.purpose,'TS2W',custTar.TARIFF_2WAYTRANS_ID,'TS1W',custTar.TARIFF_1WAYTRANS_ID,custTar.TARIFF_DISCH_ID) WHERE trim(custTar.client_code) = bld.cust_tariff_client AND custTar.rec_status = 'A' ORDER BY custTar.effective_dttm DESC, custTar.LAST_MODIFY_DTTM DESC ) custTar ON TO_CHAR(custTar.EFFECTIVE_DTTM,'yyyymmdd') <= TO_CHAR(NVL(ve.atb,vsc.vsl_eta_dttm),'yyyymmdd') AND custTar.bill_lading_nbr = bld.bill_lading_nbr AND custTar.cntr_nbr = bld.cntr_nbr LEFT JOIN (SELECT NVL(serv.local_amount,0) AS local_amount, NVL(serv.global_amount,0) AS global_amount, tar.id, tar.is_metric_ton, tar.version_nbr, tver.eff_start_dttm FROM tariffs tar INNER JOIN tariff_details tardet ON tardet.tariff_id = tar.id INNER JOIN tariff_version tver ON tver.version_nbr = tar.version_nbr INNER JOIN services serv ON serv.id = tardet.service_id AND serv.service_type IN ('D') AND serv.rec_status = 'A' WHERE tar.rec_status = 'A' ORDER BY tver.eff_start_dttm DESC ) disch ON disch.id = col.tariff_ext_cost_id LEFT JOIN (SELECT rownum AS seq, local_amount, global_amount, last_modify_dttm FROM services WHERE service_type = 'U' AND rec_status = 'A' ORDER BY last_modify_dttm DESC ) doc ON doc.seq = 1 LEFT JOIN (SELECT rownum AS seq, local_amount, global_amount, last_modify_dttm FROM services WHERE service_type = 'L' AND rec_status = 'A' ORDER BY last_modify_dttm DESC ) heavyLift ON heavyLift.seq = 1 LEFT JOIN (SELECT rownum AS seq, local_amount, global_amount, last_modify_dttm FROM services WHERE service_type = 'P' AND rec_status = 'A' ORDER BY last_modify_dttm DESC ) pos ON pos.seq = 1 LEFT JOIN (SELECT rownum AS seq, local_amount, global_amount, last_modify_dttm FROM services WHERE service_type = 'O' AND rec_status = 'A' ORDER BY last_modify_dttm DESC ) addPos ON addPos.seq = 1 LEFT JOIN cntr cn ON cn.cntr_nbr = bld.cntr_nbr AND cn.txn_status = 'A' WHERE m.pid || '=' || trim(bl.bill_lading_nbr) || '=' || bld.idx_no || '=' || trim(bld.cntr_nbr) LIKE NVL(null,'%') AND (m.vv_cd = trim(NVL('2014000433','')) OR ( upper(vsc.vsl_nm) LIKE '%' || trim(upper(NVL('EURPCARGO VENEZIA',''))) || '%' AND vsc.in_voy_nbr = trim(upper(NVL('14120502',''))) )) ORDER BY bl.bill_lading_nbr; Any suggestion for optimizing left join sub queries for oracle.
Optimize query with sql server
I have the following query .its execution took 15 min .It is too much slowly . Is there a way to optimize it ? Query SELECT Id,Fees,WeekOfMonth,CONVERT(NVARCHAR(MAX), StartDate, 103) AS StartDate,CONVERT(NVARCHAR(MAX), EndDate, 103) AS EndDate,'Temp Fees ' AS FeesName ,#MonthName AS [MonthName] INTO ##TempFeesMonthly from ( SELECT DISTINCT 1 as Id,sum(((CNTI_THPAYE *(CNTI_THFACT / CNTI_THPAYE)) * (CASE WHEN CNTI_DURHEBDO IS NULL THEN 1 ELSE CNTI_DURHEBDO/5 END)*#NumberOfDays)) AS Fees,WeekOfMonth,StartDate,EndDate FROM SCHHAYS.dbo.WTVTAT TAT LEFT JOIN SCHHAYS.dbo.WTTIEINT INT ON ( TAT.TIE_ID = INT.TIE_ID ) AND ( TAT.VTAT_IORDRE = INT.TIEI_ORDRE ) LEFT JOIN SCHHAYS.dbo.PYCONTRAT CC ON TAT.PER_ID = CC.PER_ID AND TAT.CNT_ID = CC.CNT_ID LEFT JOIN SCHHAYS.dbo.CMTIERS T ON TAT.TIE_ID = T.TIE_ID LEFT JOIN SCHHAYS.dbo.WTMISS M ON CC.PER_ID = M.PER_ID AND CC.CNT_ID = M.CNT_ID LEFT JOIN ##WTCNTIWeek COT1 ON M.PER_ID = COT1.PER_ID AND M.CNT_ID = COT1.CNT_ID INNER JOIN SCHHAYS.dbo.WTPRH AS PRH ON M.PER_ID = PRH.PER_ID AND M.CNT_ID = PRH.CNT_ID AND M.TIE_ID = PRH.TIE_ID INNER JOIN ##tempStartEndWeekDates AS Tsed ON PRH_DTEDEBSEM>=Tsed.StartDate AND PRH_DTEFINSEM<=Tsed.EndDate LEFT JOIN SCHHAYS.dbo.WTSCCT C ON CC.RGPCNT_ID = C.RGPCNT_ID AND CC.PER_ID = C.PER_ID AND CC.CNT_ID = C.CNT_ID INNER JOIN ##TempHaysStaffWeek HF ON C.VAPO_CODE = HF.onetouch COLLATE Latin1_General_CI_AS group by WeekOfMonth,StartDate,EndDate)t --CREATE INDEX IDX_TempFeesMonthly ON ##TempFeesMonthly(WeekOfMonth) --Calcul Temp Margin UNION ALL --INSERT INTO ##TempFeesMonthly(Id,Fees,WeekOfMonth,StartDate,EndDate,FeesName,[MonthName]) SELECT 2, sum(Fees) AS Fees ,WeekOfMonth,CONVERT(NVARCHAR(MAX), StartDate, 103) AS StartDate,CONVERT(NVARCHAR(MAX), EndDate, 103) AS EndDate,'Temp Margin ' AS FeesName ,#MonthName AS [MonthName] from ( SELECT DISTINCT sum((CASE WHEN CNTI_DURHEBDO IS NULL THEN 1 ELSE CNTI_DURHEBDO/5 END)*#NumberOfDays)-(CNTI_THPAYE *(CASE WHEN CNTI_DURHEBDO IS NULL THEN 1 ELSE CNTI_DURHEBDO/5 END)*1.453*1.21*#NumberOfDays) AS Fees,WeekOfMonth,StartDate,EndDate FROM SCHHAYS.dbo.WTVTAT TAT LEFT JOIN SCHHAYS.dbo.WTTIEINT INT ON ( TAT.TIE_ID = INT.TIE_ID ) AND ( TAT.VTAT_IORDRE = INT.TIEI_ORDRE ) LEFT JOIN SCHHAYS.dbo.PYCONTRAT CC ON TAT.PER_ID = CC.PER_ID AND TAT.CNT_ID = CC.CNT_ID LEFT JOIN SCHHAYS.dbo.CMTIERS T ON TAT.TIE_ID = T.TIE_ID LEFT JOIN SCHHAYS.dbo.WTMISS M ON CC.PER_ID = M.PER_ID AND CC.CNT_ID = M.CNT_ID LEFT JOIN ##WTCNTIWeek COT1 ON M.PER_ID = COT1.PER_ID AND M.CNT_ID = COT1.CNT_ID INNER JOIN SCHHAYS.dbo.WTPRH AS PRH ON M.PER_ID = PRH.PER_ID AND M.CNT_ID = PRH.CNT_ID AND M.TIE_ID = PRH.TIE_ID INNER JOIN ##tempStartEndWeekDates AS Tsed ON PRH_DTEDEBSEM>=Tsed.StartDate AND PRH_DTEFINSEM<=Tsed.EndDate LEFT JOIN SCHHAYS.dbo.WTSCCT C ON CC.RGPCNT_ID = C.RGPCNT_ID AND CC.PER_ID = C.PER_ID AND CC.CNT_ID = C.CNT_ID INNER JOIN ##TempHaysStaffWeek HF ON C.VAPO_CODE = HF.onetouch COLLATE Latin1_General_CI_AS group by WeekOfMonth,StartDate,EndDate,CNTI_THPAYE,CNTI_DURHEBDO)t GROUP BY WeekOfMonth,StartDate,EndDate
How to change this 'Not In' Query to Left Join query
I've been trying to change this query. I don't want to use 'Not In' in this query. Can anybody help me how to change this query to left join query? SELECT t.date,t.ticket,t.weight,t.Count, td.description FROM tblticket t inner join tblticketdetails td on t.ticket = td.ticket WHERE t.ticket NOT IN (SELECT r.Original_ticket from tblRenew R where isnull(r.new_ticket,'') = '' and r.transaction_status = 'valid') AND RTRIM(LTRIM(t.status)) = 'OPEN' AND td.Type = 62 AND t.weight/t.Count >= 1000 AND t.date BETWEEN '2011-12-31' AND '2013-01-17'
Providing that you don't have multiple records in tblRenew for any ticket: select t.date, t.ticket, t.weight, t.Count, td.description from tblticket t inner join tblticketdetails td on t.ticket = td.ticket left join tblRenew R on isnull(r.new_ticket,'') = '' and r.transaction_status = 'valid' and r.Original_ticket = t.ticket where r.Original_ticket is not null and RTRIM(LTRIM(t.status)) = 'OPEN' and td.Type = 62 and t.weight/t.Count >= 1000 and t.date BETWEEN '2011-12-31' AND '2013-01-17'
SELECT t.date, t.ticket,t.weight, t.Count, td.description FROM tblticket t inner join tblticketdetails td on t.ticket = td.ticket left outer join (SELECT r.Original_ticket from tblRenew R where isnull(r.new_ticket,'') = '' and r.transaction_status = 'valid' ) v on t.ticket = v.Original_ticket WHERE t.ticket NOT IN (SELECT r.Original_ticket from tblRenew R where isnull(r.new_ticket,'') = '' and r.transaction_status = 'valid') AND RTRIM(LTRIM(t.status)) = 'OPEN' AND td.Type = 62 AND t.weight/t.Count >= 1000 AND t.date BETWEEN '2011-12-31' AND '2013-01-17' and v.original_tiket is null