После запуска хранимой процедуры / запроса на конкретную дату выдает ошибку:
Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения. Заявление было прекращено. Предупреждение: нулевое значение устраняется с помощью агрегата или другой операции SET.
В другие даты оно работает нормально. В чем может быть проблема? Ниже мой код
USE [EMFactory_CAA_Test]
GO
/****** Object: StoredProcedure [dbo].[Report_Exchange_Detail] */
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Report_Exchange_Detail] (@CustomerID INT,
@StartDate DATE,
@EndDate DATE,
@OpenOnly INT,
@CEAS NVARCHAR(MAX),
@RequestType INT)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Main TABLE (RID INT,
DEPRIID INT,
RETRIID INT,
CustomerID INT,
ParatureTicketNumber NVARCHAR(100),
CloseDate DATETIME,
HasReturn BIT,
SLAStartDate DATETIME)
DECLARE @DEP TABLE (RIID INT,
DEPNumber NVARCHAR(100),
DikiID int,
Item NVARCHAR(100),
DEPSN NVARCHAR(100),
DEPTrackingNumber NVARCHAR(100),
EmployeeID NVARCHAR(100),
FirstName NVARCHAR(100),
LastName NVARCHAR(100),
Email NVARCHAR(100),
DRID INT,
DEPTypeID INT)
DECLARE @RET TABLE (RIID INT,
RIStatusID INT,
ReturnNumber NVARCHAR(100),
ReturnReason NVARCHAR(MAX),
ReturnNote NVARCHAR(MAX),
ReturnModel NVARCHAR(100),
ExpectedSN NVARCHAR(100),
ActualSN NVARCHAR(100),
ExpectedTrackingNumber NVARCHAR(100),
ActualReturnTrackingNumber NVARCHAR(100),
ReturnReceivedDate NVARCHAR(100),
INSDisposition INT,
INSNotes NVARCHAR(MAX),
INSResult NVARCHAR(MAX),
RMANumber NVARCHAR(100),
RMADate DATETIME,
RepairInspectionDisposition NVARCHAR(100),
RepairInspectionResult NVARCHAR(MAX),
RepairReceivedDate DATETIME)
IF @CEAS != '-1' AND CHARINDEX('-1',@CEAS) > 0 SET @CEAS = '-1'
--Get request and misc info for dates provided
INSERT INTO @Main (RID,CustomerID,ParatureTicketNumber,CloseDate,DEPRIID, SLAStartDate)
SELECT
RID = r.RequestID,
CustomerID = r.CustomerID,
ParatureTicketNumber = r.ParatureTicketNumber,
CloseDate = ri.CloseDate,
DEPRIID = ri.RequestItemID,
SLAStartDate = ri.SLAStartDate
FROM dbo.Request r
JOIN dbo.RequestItem ri on r.RequestID = ri.RequestID
WHERE r.CustomerID = @CustomerID
AND r.RequestTypeID = 5
AND ri.RequestItemTypeID = 1
AND ri.StatusID = 5
AND ri.CloseDate BETWEEN @StartDate AND @EndDate
AND EXISTS (Select 1 From dbo.Deployment d Where d.RequestItemID = ri.RequestItemID and (d.DeploymentTypeID = @RequestType or (@RequestType = 0 and d.DeploymentTypeID in (2,3))))
--Split requestitems into DEP and RET
UPDATE @Main SET HasReturn = CASE WHEN EXISTS (Select 1 From dbo.RequestItem ri Where ri.RequestID = RID and ri.RequestItemTypeID = 2) THEN 1 ELSE 0 END
UPDATE @Main SET RETRIID = (Select ri.RequestItemID From dbo.RequestItem ri Where ri.RequestID = RID and ri.RequestItemTypeID = 2) WHERE HasReturn = 1
--Gather DEP info
INSERT INTO @DEP
SELECT
RIID = ri.RequestItemID,
DEPNumber = MAX(ri.EMTrackingNumber),
DikiID = CASE WHEN MAX(di.KitID) IS NOT NULL THEN (Select TOP 1 diki2.DeploymentItemKitItemId From dbo.DeploymentItemKitItem diki2 Where diki2.RequestItemID = ri.RequestItemID and diki2.KitID = MAX(di.KitID) and diki2.ItemID = (Select ki.ItemID From dbo.KitItem ki Where ki.KitId = MAX(di.KitID) and ki.IsPrimaryKitItem = 1))
ELSE (Select TOP 1 diki3.DeploymentItemKitItemId From dbo.DeploymentItemKitItem diki3 Where diki3.RequestItemID = ri.RequestItemID and diki3.ItemID = MAX(di.ItemID))
END,
Item = '',
DEPSN = '',
DEPTrackingNumber = ISNULL(MAX(s.ActualTrackingNumber),''),
EmployeeID = MAX(dr.CustomerIdentifier),
FirstName = MAX(dr.FName),
LastName = MAX(dr.LName),
Email = ISNULL(MAX(dr.email),''),
MAX(dr.DeviceRecipientID),
DEPTypeID = MAX(d.DeploymentTypeID)
FROM dbo.RequestItem ri
JOIN dbo.Deployment d on ri.RequestItemID = d.RequestItemID
JOIN dbo.DeploymentItem di ON di.DeploymentID = d.DeploymentID
JOIN dbo.DeploymentItemKitItem diki ON diki.DeploymentItemID = di.DeploymentItemID
JOIN dbo.Shipment s on ri.ShipmentID = s.ShipmentID
JOIN dbo.DeviceRecipient dr on dr.DeviceRecipientID = d.DeviceRecipientID
WHERE diki.Serialized = 1
AND ri.RequestItemID IN (Select DEPRIID From @Main)
GROUP BY ri.RequestItemID
UPDATE @DEP SET Item = (Select i.Name From dbo.Item i Where i.ItemID = (Select diki.ItemID From dbo.DeploymentItemKitItem diki Where diki.DeploymentItemKitItemId = DikiID))
UPDATE @DEP SET DEPSN = (Select ISNULL(diki.SerialNumber,'') From dbo.DeploymentItemKitItem diki Where diki.DeploymentItemKitItemId = DikiID)
--Gather RET info
INSERT INTO @RET
SELECT
RIID = ri.RequestItemID,
RTIStatusID = MAX(rti.ReturnItemStatusID),
ReturnNumber = ISNULL(MAX(ri.EMTrackingNumber),''),
ReturnReason = dbo.fnGetReturnReasonString (MAX(rt.ReturnID)),
ReturnNote = ISNULL(MAX(rt.IssueDescription),''),
ReturnModel = MAX(i.Name),
ExpectedSN = MAX(rti.ExpectedSerialNumber),
ActualSN = MAX(rti.ActualSerialNumber),
ExpectedTrackingNumber = MAX(rt.InboundTrackingNumber),
ActualReturnTrackingNumber = ISNULL(MAX(rti.ActualTrackingNumber),''),
ReturnReceivedDate = CASE WHEN MAX(rti.ReturnItemStatusID) = 1 THEN 'Not Received'
WHEN MAX(rti.ReturnItemStatusID) = 9 THEN 'Canceled' + ISNULL(': '+MAX(rti.Notes),'')
ELSE CAST(CAST(MAX(rti.DateReceived) as date) as nvarchar(10))
END,
INSDisposition = CASE WHEN MAX(rti.ReturnItemStatusID) IN (1,9) THEN -1 ELSE ISNULL(MAX(ins.InspectionResultID),0) END,
INSNotes = ISNULL(MAX(ins.InspectionNotes),''),
INSResult = dbo.fnGetInspectionNotesString(MAX(ins.InspectionID)),
RMANumber = ISNULL(MAX(rma.RMANumber),''),
RMADate = MAX(rma.DateCreated),
RepairInspectionDisposition = (Select ISNULL(MAX(ins.InspectionResultID),0) From dbo.Inspection ins Where ins.RequestItemID = MAX(r.RequestItemID)),
RepairInspectionResult = (Select dbo.fnGetInspectionNotesString(MAX(ins.InspectionID)) From dbo.Inspection ins Where ins.RequestItemID = MAX(r.RequestItemID)),
RepairReceivedDate = MAX(r.DateReceivedBack)
FROM dbo.RequestItem ri
JOIN dbo.[Return] rt ON ri.RequestItemID = rt.RequestItemID
JOIN dbo.ReturnItem rti ON rti.ReturnID = rt.ReturnID
JOIN dbo.Item i ON i.ItemID = rti.ItemID
LEFT JOIN dbo.Inspection ins ON ins.SpecificID = rti.ReturnItemID and ins.InspectionTypeID = 2
LEFT JOIN dbo.Repair r ON r.GeneratingRequestItemID = ri.RequestItemID AND r.SerialNumber = rti.ActualSerialNumber
LEFT JOIN dbo.RMA rma ON rma.RMA_ID = r.RMAId
WHERE i.Serialized = 1
AND rti.ReturnItemStatusID IN (1,7,9)
AND ri.RequestItemID in (Select RETRIID From @Main Where RETRIID is not null and RETRIID > 0)
GROUP BY ri.RequestItemID
;
WITH CEA AS
(SELECT
DRRIDCEA = av.entityinstanceid,
DRCEA = cea.attributedisplaylabel,
DRCEAVALUE = av.value
FROM dbo.AttributeValue av
JOIN CustomerEntityAttribute cea on av.CustomerEntityAttributeID = cea.CustomerEntityAttributeID
WHERE av.EntityInstanceID in (SELECT DRID FROM @DEP)
AND cea.EntityTypeID = 1
AND cea.ExcludeFromReports = 0
AND av.Value IS NOT NULL
AND av.Value !=''
AND (cea.CustomerEntityAttributeID in (SELECT ID FROM dbo.fnSplitMultivalueIDList (@CEAS,',')) OR @CEAS = '-1')
)
SELECT
Customer = (Select c.Name From dbo.Customer c Where c.CustomerID = m.CustomerID),
m.ParatureTicketNumber,
dep.EmployeeID,
dep.FirstName,
dep.LastName,
dep.Email,
CAAEscalation = CAST(m.SLAStartDate AS SMALLDATETIME),
ShipDate = m.CloseDate,
Age = DATEDIFF(DAY, m.CloseDate, GETDATE()),
dep.DEPNumber,
dep.Item,
dep.DEPSN,
dep.DEPTrackingNumber,
DEPType = (Select ldt.Name from dbo.LookupDeploymentType ldt Where ldt.DeploymentTypeID = dep.DEPTypeID),
ReturnReason = CASE WHEN m.HasReturn = 1 THEN ret.ReturnReason ELSE 'Exchange w/o Return' END,
ReturnNote = ISNULL(ret.ReturnNote,''),
ReturnModel = ISNULL(ret.ReturnModel,''),
ExpectedSN = ISNULL(ret.ExpectedSN,''),
ActualSN = ISNULL(ret.ActualSN,''),
ExpectedTrackingNumber = ISNULL(ret.ExpectedTrackingNumber,''),
ActualReturnTrackingNumber = CASE WHEN LEN(ret.ActualReturnTrackingNumber) = 34 THEN Right(ret.ActualReturnTrackingNumber,12) ELSE ISNULL(ret.ActualReturnTrackingNumber,'') END,
ReturnReceived = CASE WHEN ret.RIStatusID = 7 THEN 'Y' WHEN ret.RIStatusID = 9 THEN 'Cancelled' ELSE 'N' END,
ReturnReceivedDate = ISNULL(ret.ReturnReceivedDate,''),
INSResult = ISNULL(ret.INSResult,''),
INSNotes = ISNULL(ret.INSNotes,''),
INSDisposition = CASE WHEN ret.INSDisposition = -1 OR ret.INSDisposition IS NULL THEN ''
WHEN ret.INSDisposition = 2 THEN 'Sent To Repair'
ELSE (Select lir.InspectionResultName From dbo.LookupInspectionResult lir Where lir.InspectionResultID = ret.INSDisposition)
END,
RMANumber = ISNULL(ret.RMANumber,''),
ret.RMADate,
RepairInspectionDisposition = CASE WHEN ret.RepairInspectionDisposition = 2 THEN 'Sent To Repair'
ELSE (Select lir.InspectionResultName From dbo.LookupInspectionResult lir Where lir.InspectionResultID = ret.RepairInspectionDisposition)
END,
ret.RepairInspectionResult,
ret.RepairReceivedDate,
cea.DRRIDCEA,
cea.DRCEA,
cea.DRCEAVALUE
FROM @Main m
JOIN @DEP dep ON dep.RIID = m.DEPRIID
LEFT JOIN @RET ret ON ret.RIID = m.RETRIID
LEFT JOIN cea on dep.DRID = cea.drridcea
WHERE (@OpenOnly = 0 OR (@OpenOnly = 1 AND ret.ActualSN = '' AND m.HasReturn = 1))
ORDER BY Age, m.DEPRIID, cea.DRCea
END