Experts,
I have this query that links the Service Contract and Service Contract Items tab and Sales Data tab, where the recurring Invoices are linked.
My initial issue was that there was duplicating lines when there was more than 1 Item line in the Item tab of the Service Contract. I was able to concatenate this successfully.
Then the issue came up that I get errors on the Where statement....
Here is the query that works:
declare @contractid varchar(500) = ''
declare @rowsCount INT
declare @i INT = 1
declare @names varchar(max) = ''
DECLARE @MyEngineSerials TABLE
(
Id int identity,
Name varchar(500)
)
DECLARE @MyResults TABLE
(
processed int,
ContractID varchar(500),
EndDate varchar(500),
ObjType varchar(500),
DocNum varchar(500),
DocDate varchar(500),
Dscription varchar(500),
Quantity varchar(500),
LineTotal varchar(500),
Address2 varchar(500),
callID varchar(500),
serials varchar(500)
)
insert into @MyResults
SELECT
0 as "processed",
T0.[ContractID],
T0.[EndDate],
T4.[ObjType],
T4.[DocNum],
T4.[DocDate],
T5.[Dscription],
T5.[Quantity],
T5.[LineTotal],
T4.[Address2],
T7.[callID],
'not determined' as "serials"
FROM [dbo].[OCTR] T0
INNER JOIN [dbo].[CTR2] T1 ON T0.[ContractID] = T1.[ContractID]
INNER JOIN [dbo].[ORCP] T2 ON T1.[RcpEntry] = T2.[AbsEntry]
INNER JOIN ODRF T3 ON T2.[DraftEntry] = T3.[DocEntry]
INNER JOIN OINV T4 ON T3.[DocEntry] = T4.[draftKey]
INNER JOIN INV1 T5 ON T4.[DocEntry] = T5.[DocEntry]
INNER JOIN OSCL T7 ON T0.[ContractID] = T7.[contractID]
WHERE T4.[DocDate] BETWEEN '01/01/2016 00:00:00.00' AND '11/11/2017 23:59:59.999'
While (Select Count(*) From @MyResults Where processed = 0) > 0
Begin
set @contractid = (Select Top 1 ContractID From @MyResults Where processed = 0)
--DELETE FROM @MyTable
insert into @MyEngineSerials
SELECT DISTINCT
T6.[ManufSN]
FROM
[dbo].[OCTR] T0
INNER JOIN CTR1 T6 ON T0.[ContractID] = T6.[ContractID]
WHERE
T0.[ContractID] = @contractid
set @rowsCount = (select COUNT(Id) from @MyEngineSerials)
while @i <= @rowsCount
begin
set @names = @names + ' ' + (select name from @MyEngineSerials where Id = @i)
set @i = @i + 1
end
--select @names as serial_numbers
--Do some processing here
Update @MyResults Set serials = @names Where ContractID = @contractid
Update @MyResults Set processed = 1 Where ContractID = @contractid
End
select * from @MyResults
Here is the query that gives an error on the syntax near T4...
declare @contractid varchar(500) = ''
declare @rowsCount INT
declare @i INT = 1
declare @names varchar(max) = ''
DECLARE @MyEngineSerials TABLE
(
Id int identity,
Name varchar(500)
)
DECLARE @MyResults TABLE
(
processed int,
ContractID varchar(500),
EndDate varchar(500),
ObjType varchar(500),
DocNum varchar(500),
DocDate varchar(500),
Dscription varchar(500),
Quantity varchar(500),
LineTotal varchar(500),
Address2 varchar(500),
callID varchar(500),
serials varchar(500)
)
insert into @MyResults
SELECT
0 as "processed",
T0.[ContractID],
T0.[EndDate],
T4.[ObjType],
T4.[DocNum],
T4.[DocDate],
T5.[Dscription],
T5.[Quantity],
T5.[LineTotal],
T4.[Address2],
T7.[callID],
'not determined' as "serials"
FROM [dbo].[OCTR] T0
INNER JOIN [dbo].[CTR2] T1 ON T0.[ContractID] = T1.[ContractID]
INNER JOIN [dbo].[ORCP] T2 ON T1.[RcpEntry] = T2.[AbsEntry]
INNER JOIN ODRF T3 ON T2.[DraftEntry] = T3.[DocEntry]
INNER JOIN OINV T4 ON T3.[DocEntry] = T4.[draftKey]
INNER JOIN INV1 T5 ON T4.[DocEntry] = T5.[DocEntry]
INNER JOIN OSCL T7 ON T0.[ContractID] = T7.[contractID]
WHERE T4.[DocDate] >=[%0] AND T4.[DocDate] <=[%1]
While (Select Count(*) From @MyResults Where processed = 0) > 0
Begin
set @contractid = (Select Top 1 ContractID From @MyResults Where processed = 0)
--DELETE FROM @MyTable
insert into @MyEngineSerials
SELECT DISTINCT
T6.[ManufSN]
FROM
[dbo].[OCTR] T0
INNER JOIN CTR1 T6 ON T0.[ContractID] = T6.[ContractID]
WHERE
T0.[ContractID] = @contractid
set @rowsCount = (select COUNT(Id) from @MyEngineSerials)
while @i <= @rowsCount
begin
set @names = @names + ' ' + (select name from @MyEngineSerials where Id = @i)
set @i = @i + 1
end
--select @names as serial_numbers
--Do some processing here
Update @MyResults Set serials = @names Where ContractID = @contractid
Update @MyResults Set processed = 1 Where ContractID = @contractid
End
select * from @MyResults
Any help would be appreciated,
Marli