ASKER
ASKER
CREATE PROCEDURE usp_YourStoredProedure
@chkInventory int,
@txtCustomerNumber varchar(MAX), -- Don't use varchar(MAX) where it is not appropriate:
@strGrade varchar(MAX), -- Are you really going to pass in up to 2 billion characters?
@strRodSize varchar(MAX),
@strSecondaryRodSize varchar(MAX), -- not used
@strHeat varchar(MAX) -- not used
AS
SET NOCOUNT ON;
--DECLARE @return_value int, -- not used
-- @strAllocateSQL varchar(max)
--SET @strHeat = NULLIF(@strHeat, '')
IF @chkInventory = 0
SELECT x.*, -- Don't use *, columns should be explicitly named
x.Received - x.Shipped - x.Transferred AS OnHand,
x.Received - x.Allocated AS Available,
CASE WHEN x.Received > 0 THEN CAST(x.[Weight] / CASE WHEN x.Received - x.Shipped - x.Transferred = 0 THEN NULL
ELSE x.Received - x.Shipped - x.Transferred
END AS int)
ELSE 0
END AS AvgWt
FROM (SELECT b.HeatID,
b.Customer AS Customer,
a.GradeType,
a.RodSize,
a.HeatNumber,
a.Grade,
a.VendorNumber,
a.Consignment,
a.Vendor,
a.CustomerNumber,
a.CustomerPO,
a.PremiumRod,
SUM(CASE WHEN b.TrxType = 'R'
AND b.LbsTransferred = 0 THEN b.NoOfCoils
ELSE 0
END) AS Received,
SUM(CASE WHEN b.TrxType = 'S'
AND b.TransferToCustomer = 0 THEN b.CoilsShipped
ELSE 0
END) AS Shipped,
SUM(CASE WHEN b.TrxType = 'A' THEN b.NoOfCoils
ELSE 0
END) AS Allocated,
SUM(CASE WHEN b.TrxType = 'R'
AND b.LbsTransferred > 0 THEN b.NoOfCoils
ELSE 0
END) AS TransferredIn,
SUM(CASE WHEN b.TrxType = 'S'
AND b.TransferToCustomer > 0 THEN b.CoilsShipped
ELSE 0
END) AS TransferredOut,
SUM(CASE WHEN b.TrxType = 'S'
AND b.TransferToCustomer > 0 THEN b.CoilsShipped
ELSE 0
END) AS Transferred,
SUM(b.LbsRecd - b.LBSShipped + b.LbsTransferred) AS Weight,
MIN(CASE WHEN b.TrxType = 'R' THEN b.TrxDate
END) AS EarlyDate
FROM tblHeat AS a
LEFT JOIN tblHeatTransaction AS b ON a.ID = b.HeatID
WHERE (b.TransferFromCustomer IN (70, 79, 74, 81, 97)
OR b.CustomerNumber IN (70, 79, 74, 81, 97)
OR b.CustomerNumber = CAST(@txtCustomerNumber AS int)
)
AND (@strGrade = ''
OR a.Grade = @strGrade
)
AND (@strRodSize = ''
OR a.RodSize = @strRodSize
)
GROUP BY b.HeatID,
b.Customer,
a.RodSize,
a.HeatNumber,
a.Grade,
a.VendorNumber,
a.Consignment,
a.GradeType,
a.Vendor,
a.CustomerNumber,
a.CustomerPO,
a.PremiumRod
HAVING Received - Allocated > 0
) AS x
ELSE
SELECT x.*, -- Don't use *, columns should be explicitly named
x.Received - x.Shipped - x.Transferred AS OnHand,
x.Received - x.Allocated AS Available,
CASE WHEN x.Received > 0 THEN CAST(x.[Weight] / CASE WHEN x.Received - x.Shipped - x.Transferred = 0 THEN NULL
ELSE x.Received - x.Shipped - x.Transferred
END AS int)
ELSE 0
END AS AvgWt
FROM (SELECT b.HeatID,
b.Customer AS Customer,
a.GradeType,
a.RodSize,
a.HeatNumber,
a.Grade,
a.VendorNumber,
a.Consignment,
a.Vendor,
a.CustomerNumber,
a.CustomerPO,
a.PremiumRod,
SUM(CASE WHEN b.TrxType = 'R'
AND b.LbsTransferred = 0 THEN b.NoOfCoils
ELSE 0
END) AS Received,
SUM(CASE WHEN b.TrxType = 'S'
AND b.TransferToCustomer = 0 THEN b.CoilsShipped
ELSE 0
END) AS Shipped,
SUM(CASE WHEN b.TrxType = 'A' THEN b.NoOfCoils
ELSE 0
END) AS Allocated,
SUM(CASE WHEN b.TrxType = 'R'
AND b.LbsTransferred > 0 THEN b.NoOfCoils
ELSE 0
END) AS TransferredIn,
SUM(CASE WHEN b.TrxType = 'S'
AND b.TransferToCustomer > 0 THEN b.CoilsShipped
ELSE 0
END) AS TransferredOut,
SUM(CASE WHEN b.TrxType = 'S'
AND b.TransferToCustomer > 0 THEN b.CoilsShipped
ELSE 0
END) AS Transferred,
SUM(b.LbsRecd - b.LBSShipped + b.LbsTransferred) AS Weight,
MIN(CASE WHEN b.TrxType = 'R' THEN b.TrxDate
END) AS EarlyDate
FROM tblHeat AS a
LEFT JOIN tblHeatTransaction AS b ON a.ID = b.HeatID
GROUP BY b.HeatID,
b.Customer,
a.RodSize,
a.HeatNumber,
a.Grade,
a.VendorNumber,
a.Consignment,
a.GradeType,
a.Vendor,
a.CustomerNumber,
a.CustomerPO,
a.PremiumRod
HAVING Received - Allocated > 0
) AS x
ASKER
ASKER
ASKER
USE [OrderEntry_prodSQL]
GO
/****** Object: StoredProcedure [dbo].[usp_YourStoredProedure2] Script Date: 10/16/2013 18:04:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[usp_YourStoredProedure2]
@chkInventory int,
@txtCustomerNumber varchar(10),
@strGrade varchar(10),
@strRodSize varchar(8)
AS
SET NOCOUNT ON;
IF @chkInventory = 0
SELECT x.*,
x.Received - x.Shipped - x.Transferred AS OnHand,
x.Received - x.Allocated AS Available,
CASE WHEN x.Received > 0 THEN CAST(x.[Weight] / CASE WHEN x.Received - x.Shipped - x.Transferred = 0 THEN NULL
ELSE x.Received - x.Shipped - x.Transferred
END AS int)
ELSE 0
END AS AvgWt
FROM (SELECT b.HeatID,
b.Customer AS Customer,
a.GradeType,
a.RodSize,
a.HeatNumber,
a.Grade,
a.VendorNumber,
a.Consignment,
a.Vendor,
a.CustomerNumber,
a.CustomerPO,
a.PremiumRod,
SUM(CASE WHEN b.TrxType = 'R'
AND b.LbsTransferred = 0 THEN b.NoOfCoils
ELSE 0
END) AS Received,
SUM(CASE WHEN b.TrxType = 'S'
AND b.TransferToCustomer = 0 THEN b.CoilsShipped
ELSE 0
END) AS Shipped,
SUM(CASE WHEN b.TrxType = 'A' THEN b.NoOfCoils
ELSE 0
END) AS Allocated,
SUM(CASE WHEN b.TrxType = 'R'
AND b.LbsTransferred > 0 THEN b.NoOfCoils
ELSE 0
END) AS TransferredIn,
SUM(CASE WHEN b.TrxType = 'S'
AND b.TransferToCustomer > 0 THEN b.CoilsShipped
ELSE 0
END) AS TransferredOut,
SUM(CASE WHEN b.TrxType = 'R'
AND b.TransferToCustomer > 0 THEN b.NoOfCoils
ELSE 0
END) AS Transferred,
SUM(b.LbsRecd - b.LBSShipped + b.LbsTransferred) AS Weight,
MIN(CASE WHEN b.TrxType = 'R' THEN b.TrxDate
END) AS EarlyDate
FROM tblHeat AS a
LEFT JOIN tblHeatTransaction AS b ON a.ID = b.HeatID
WHERE (b.TransferFromCustomer IN (70, 79, 74, 81, 97,10)
OR b.CustomerNumber IN (70, 79, 74, 81, 97,10)
)
AND (@strGrade = ''
OR a.Grade = '1022'
)
AND (@strRodSize = ''
OR a.RodSize = '1/4'
)
GROUP BY b.HeatID,
b.Customer,
a.RodSize,
a.HeatNumber,
a.Grade,
a.VendorNumber,
a.Consignment,
a.GradeType,
a.Vendor,
a.CustomerNumber,
a.CustomerPO,
a.PremiumRod
HAVING SUM(CASE WHEN b.TrxType = 'R'
AND b.LbsTransferred = 0 THEN b.NoOfCoils
ELSE 0
END) -
SUM(CASE WHEN b.TrxType = 'A' THEN b.NoOfCoils
ELSE 0
END) > 0
) AS x
ELSE
SELECT x.*, -- Don't use *, columns should be explicitly named
x.Received - x.Shipped - x.Transferred AS OnHand,
x.Received - x.Allocated AS Available,
CASE WHEN x.Received > 0 THEN CAST(x.[Weight] / CASE WHEN x.Received - x.Shipped - x.Transferred = 0 THEN NULL
ELSE x.Received - x.Shipped - x.Transferred
END AS int)
ELSE 0
END AS AvgWt
FROM (SELECT b.HeatID,
b.Customer AS Customer,
a.GradeType,
a.RodSize,
a.HeatNumber,
a.Grade,
a.VendorNumber,
a.Consignment,
a.Vendor,
a.CustomerNumber,
a.CustomerPO,
a.PremiumRod,
SUM(CASE WHEN b.TrxType = 'R'
AND b.LbsTransferred = 0 THEN b.NoOfCoils
ELSE 0
END) AS Received,
SUM(CASE WHEN b.TrxType = 'S'
AND b.TransferToCustomer = 0 THEN b.CoilsShipped
ELSE 0
END) AS Shipped,
SUM(CASE WHEN b.TrxType = 'A' THEN b.NoOfCoils
ELSE 0
END) AS Allocated,
SUM(CASE WHEN b.TrxType = 'R'
AND b.LbsTransferred > 0 THEN b.NoOfCoils
ELSE 0
END) AS TransferredIn,
SUM(CASE WHEN b.TrxType = 'S'
AND b.TransferToCustomer > 0 THEN b.CoilsShipped
ELSE 0
END) AS TransferredOut,
SUM(CASE WHEN b.TrxType = 'R'
AND b.TransferToCustomer > 0 THEN b.NoOfCoils
ELSE 0
END) AS Transferred,
SUM(b.LbsRecd - b.LBSShipped + b.LbsTransferred) AS Weight,
MIN(CASE WHEN b.TrxType = 'R' THEN b.TrxDate
END) AS EarlyDate
FROM tblHeat AS a
LEFT JOIN tblHeatTransaction AS b ON a.ID = b.HeatID
GROUP BY b.HeatID,
b.Customer,
a.RodSize,
a.HeatNumber,
a.Grade,
a.VendorNumber,
a.Consignment,
a.GradeType,
a.Vendor,
a.CustomerNumber,
a.CustomerPO,
a.PremiumRod
HAVING SUM(CASE WHEN b.TrxType = 'R'
AND b.LbsTransferred = 0 THEN b.NoOfCoils
ELSE 0
END) -
SUM(CASE WHEN b.TrxType = 'A' THEN b.NoOfCoils
ELSE 0
END) > 0
) AS x
GO
When I isolateCREATE PROCEDURE usp_YourStoredProedure @chkInventory int,
@txtCustomerNumber varchar(MAX), -- Don't use varchar(MAX) where it is not appropriate:
@strGrade varchar(MAX), -- Are you really going to pass in up to 2 billion characters?
@strRodSize varchar(MAX),
@strSecondaryRodSize varchar(MAX), -- not used
@strHeat varchar(MAX) -- not used
AS
SET NOCOUNT ON;
--DECLARE @return_value int, -- not used
-- @strAllocateSQL varchar(max)
--SET @strHeat = NULLIF(@strHeat, '')
SELECT
x.HeatID
, x.Customer
, x.GradeType
, x.RodSize
, x.HeatNumber
, x.Grade
, x.VendorNumber
, x.Consignment
, x.Vendor
, x.CustomerNumber
, x.CustomerPO
, x.PremiumRod
, x.Allocated --<< if left joining use ISNULL(x.Allocated) as Allocated
, x.Received
, x.TransferredIn
, x.Transferred
, x.EarlyDate
, x.Shipped
, x.TransferredOut
, x.Weight
, x.Received - x.Shipped - x.Transferred AS OnHand
, x.Received - x.Allocated AS Available
, CASE
WHEN x.Received > 0 THEN CAST(x.[Weight] / CASE
WHEN x.Received - x.Shipped - x.Transferred = 0 THEN NULL
ELSE x.Received - x.Shipped - x.Transferred
END AS int)
ELSE 0
END AS AvgWt
FROM (
SELECT
b.HeatID
, b.Customer
, a.GradeType
, a.RodSize
, a.HeatNumber
, a.Grade
, a.VendorNumber
, a.Consignment
, a.Vendor
, a.CustomerNumber
, a.CustomerPO
, a.PremiumRod
, SUM(CASE
WHEN b.TrxType = 'A' THEN b.NoOfCoils
ELSE 0
END) AS Allocated
, SUM(CASE
WHEN b.TrxType = 'R'
AND b.LbsTransferred = 0 THEN b.NoOfCoils
ELSE 0
END) AS Received
, SUM(CASE
WHEN b.TrxType = 'R'
AND b.LbsTransferred > 0 THEN b.NoOfCoils
ELSE 0
END) AS TransferredIn
, SUM(CASE
WHEN b.TrxType = 'R'
AND b.TransferToCustomer > 0 THEN b.CoilsShipped
ELSE 0
END) AS Transferred
, MIN(CASE
WHEN b.TrxType = 'R' THEN b.TrxDate
END) AS EarlyDate
, SUM(CASE
WHEN b.TrxType = 'S'
AND b.TransferToCustomer = 0 THEN b.CoilsShipped
ELSE 0
END) AS Shipped
, SUM(CASE
WHEN b.TrxType = 'S'
AND b.TransferToCustomer > 0 THEN b.CoilsShipped
ELSE 0
END) AS TransferredOut
, SUM(b.LbsRecd - b.LBSShipped + b.LbsTransferred) AS Weight
FROM tblHeatTransaction AS b
INNER JOIN tblHeat AS a ON a.ID = b.HeatID
WHERE ( @chkInventory = 0
AND (
b.TransferFromCustomer IN (70, 79, 74, 81, 97)
OR b.CustomerNumber IN (70, 79, 74, 81, 97)
OR b.CustomerNumber = CAST(@txtCustomerNumber AS int)
)
AND (@strGrade = '' OR a.Grade = @strGrade)
AND (@strRodSize = '' OR a.RodSize = @strRodSize)
)
OR
( @chkInventory <> 0 OR @chkInventory IS NULL )
GROUP BY
b.HeatID
, b.Customer
, a.RodSize
, a.HeatNumber
, a.Grade
, a.VendorNumber
, a.Consignment
, a.GradeType
, a.Vendor
, a.CustomerNumber
, a.CustomerPO
, a.PremiumRod
HAVING SUM(CASE
WHEN b.TrxType = 'R'
AND b.LbsTransferred = 0 THEN b.NoOfCoils
ELSE 0
END)
- SUM(CASE
WHEN b.TrxType = 'A' THEN b.NoOfCoils
ELSE 0
END)
> 0
) AS x
GO
Microsoft SQL Server is a suite of relational database management system (RDBMS) products providing multi-user database access functionality.SQL Server is available in multiple versions, typically identified by release year, and versions are subdivided into editions to distinguish between product functionality. Component services include integration (SSIS), reporting (SSRS), analysis (SSAS), data quality, master data, T-SQL and performance tuning.
TRUSTED BY