Quantcast
Channel: SCN: Message List
Viewing all articles
Browse latest Browse all 8950

Query where statement issues

$
0
0

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


Viewing all articles
Browse latest Browse all 8950

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>