cancel
Showing results for 
Search instead for 
Did you mean: 

Datadiff en sap con variables

Former Member
0 Kudos

Hola,

tengo la siguiente consulta en SAP que me muestra las cantidades totales vendidas de un articulo entre una fecha y otra asi:

SELECT DISTINCT T0.[ItemCode], SUM(T0.[Quantity]) AS TOTAL,T2.[ItmsGrpNam]

FROM INV1 T0 

INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode

INNER JOIN OITB T2 ON T1.ItmsGrpCod = T2.ItmsGrpCod

WHERE  T0.[DocDate] >=[%0] AND [DocDate] <=[%1] AND  T2.[ItmsGrpNam] = [%2]

GROUP BY T0.[ItemCode], T2.[ItmsGrpNam]

ORDER BY T0.[ItemCode]

lo que hace es que me muestra los items vendidos en un rango de fecha y segun el grupo que le doy, hasta hay todo bien ahora necesito calcular los meses que hay entre las fechas que capturo, lo estoy haciendo con un DATEDIFF pero me arroja un error lo estoy haciendo asi:

SELECT DISTINCT T0.[ItemCode], SUM(T0.[Quantity]) AS TOTAL,T2.[ItmsGrpNam],  DATEDIFF(MONTH, T0.DocDate=[%0] , T0.DocDate=[%1]  ) AS MESES

FROM INV1 T0 

INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode

INNER JOIN OITB T2 ON T1.ItmsGrpCod = T2.ItmsGrpCod

WHERE  T0.[DocDate] >=[%0] AND [DocDate] <=[%1] AND  T2.[ItmsGrpNam] = [%2]

GROUP BY T0.[ItemCode], T2.[ItmsGrpNam]

ORDER BY T0.[ItemCode]

tambien intente quitando el t0.docdate del datatiff y dejando solo las variables pero no me arroja este error:

1). [Microsoft][SQL Server Native Client 10.0][SQL Server]Incorrect syntax near '='. 2). [Microsoft][SQL Server Native Client 10.0][SQL Server]Statement 'Alertas recibidas' (OAIB) (s) could not be prepared.

tambien le quiete el igual en el datadiff pero me arroja este error:

1). [Microsoft][SQL Server Native Client 10.0][SQL Server]Incorrect syntax near the keyword 'CONVERT'. 2). [Microsoft][SQL Server Native Client 10.0][SQL Server]Statement 'Alertas recibidas' (OAIB) (s) could not be prepared.

lo peor de todo es que si hago la consulta en sql sin variables si me la toma, en sql la estoy haciendo asi:

SELECT DISTINCT T0.[ItemCode], SUM(T0.[Quantity]) AS TOTAL,T2.[ItmsGrpNam],

DATEDIFF(MONTH, '20140101', '20140531') AS MESES

FROM INV1 T0 

INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode

INNER JOIN OITB T2 ON T1.ItmsGrpCod = T2.ItmsGrpCod

WHERE  T0.[DocDate] BETWEEN '20140101' AND '20140531' AND T2.[ItmsGrpNam] = 'YEC'

GROUP BY T0.[ItemCode], T2.[ItmsGrpNam]

ORDER BY T0.[ItemCode]

y me muestra la columna mes con el la diferencia de meses que en este caso son 4, qué podria hacer para que el datadiff me tome las variables que capturan la fecha??

Espero haya sido claro con mi duda y me puedas ayudar.

quedo atento a comentarios.

Mil gracias

Accepted Solutions (1)

Accepted Solutions (1)

armandomuozsule
Active Participant
0 Kudos

Hola Lender Buena Tarde, prueba este query espero que llene tu requerimiento.

saludos cordiales

Declare @F1 Datetime

Declare @F2 Datetime

Set @F1 = (select min(S0.DocDate) from INV1 S0 Where S0.Docdate >= '[%0]')

Set @F2 = (Select max(S1.Docdate) from INV1 S1 Where S1.DocDate <='[%1]')

SELECT   DISTINCT T0.[ItemCode], SUM(T0.[Quantity]) AS TOTAL,T2.[ItmsGrpNam],  DATEDIFF(mm, @F1, @F2) AS Meses from INV1 T0 

INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode

INNER JOIN OITB T2 ON T1.ItmsGrpCod = T2.ItmsGrpCod

WHERE  T0.[DocDate] BETWEEN @F1 AND @F2 AND T2.[ItmsGrpNam] in('[%2]')

GROUP BY T0.[ItemCode], T2.[ItmsGrpNam]

ORDER BY T0.[ItemCode]

Former Member
0 Kudos

mil gracias Armando.

Answers (1)

Answers (1)

eloy_ploche2
Participant
0 Kudos

Hola Lender,

Me parece que el problema esta en el.uso de las variables. Agregale al inicio y al final un apostrofe. Por ejemplo [%0] debes poner '[%0]'

Esto es solo dentro de Sap.

Espero te ayude.

Saludos

Former Member
0 Kudos

Hola Eloy, gracias por la pronta respuesta, pues acabo de intentar lo que dices primero puse los apostrofes en la captura de las fechas osea en el where luego en el datediff y luego en los dos y nada aunque ahora me aparece este error, te envio el codigo que estoy poniendo y el error que me envia:

SELECT DISTINCT T0.[ItemCode], SUM(T0.[Quantity]), T2.[ItmsGrpNam], datediff(MONTH, '[%0]', '[%1]') AS MESES

FROM INV1 T0 

INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode

INNER JOIN OITB T2 ON T1.ItmsGrpCod = T2.ItmsGrpCod

WHERE T0.[DocDate] >= '[%0]' AND  T0.[DocDate] <= '[%1]' AND  T2.[ItmsGrpNam] = '[%2]'

GROUP BY T0.[ItemCode], T2.[ItmsGrpNam]

ORDER BY T0.[ItemCode]

ERRO:

1). [Microsoft][SQL Server Native Client 10.0][SQL Server]The conversion of a nvarchar data type to a datetime data type resulted in an out-of-range value.  'Alertas recibidas' (OAIB)