SQL Server - Ayuda con codigo de consulta

 
Vista:

Ayuda con codigo de consulta

Publicado por jhonatan ruiz (4 intervenciones) el 16/11/2016 00:42:43
Estimados amigos y colegas buenas noches les escribo por lo siguiente.

Estoy tratando de crear una vista en SQL Server 2008 para poder generar luego un reporte pero al momento de colocar la sentencia case no logro que me haga lo que necesito he buscado y buscado pero aun no logro nada.

les anexo una copia de la vista para que tengan una dia.

-----------------------------------------------------------------------------------------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT dbo.SAPAGCXC.TipoCxc, dbo.SAPAGCXC.Monto AS [MONTO PAGADO], dbo.SAPAGCXC.Descrip AS [DETALLE DEL PAGO], dbo.SAPAGCXC.EsReten AS [TIENE RET],
    dbo.SAPAGCXC.BaseReten AS [BASE RET PAG], dbo.SAPAGCXC.BaseImpo AS [BASE IMP PAG], dbo.SAPAGCXC.TExento AS [P EXENTO PAGO],
    dbo.SAPAGCXC.MtoTax AS [MONTO IVA PAGO], dbo.SAACXC.NumeroN AS [NUMERO FACT], dbo.SAFACT.TipoFac AS [TIPO DE DOC],
    dbo.SAFACT.NumeroD AS [NUMERO F], dbo.SAFACT.Monto AS [MONTO ORIGINAL], dbo.SAFACT.FechaE AS [FECHA FACT],
    dbo.SAPAGCXC.FechaE AS [FECHA DEL PAGO], dbo.SAACXC.CodVend AS [CODIG VEND], dbo.SAACXC.TipoCxc AS [TIPO CXC], dbo.SAFACT.MtoTax,
    dbo.SAFACT.MtoTotal, dbo.SAACXC.NumeroD, dbo.SAFACT.CodClie, dbo.SAFACT.Descrip, DATEDIFF(d, dbo.SAFACT.FechaE, dbo.SAPAGCXC.FechaE)
    AS DIASCREDITO,
    CASE(
      WHEN   DIASCREDITO >=0 and DIASCREDITO <=3 THEN 3,5
      WHEN   DIASCREDITO >=4 and DIASCREDITO <=7 THEN 3,25
      WHEN   DIASCREDITO >=8 and DIASCREDITO <=14 THEN 3
      WHEN   DIASCREDITO >=15 and DIASCREDITO <=30 THEN 2
      WHEN   DIASCREDITO >=31 and DIASCREDITO <=30000000 THEN 0
    ELSE)
 
FROM dbo.SAPAGCXC INNER JOIN
    dbo.SAACXC ON dbo.SAPAGCXC.NroPpal = dbo.SAACXC.NroUnico INNER JOIN
    dbo.SAFACT ON dbo.SAACXC.NumeroN = dbo.SAFACT.NumeroD


Básicamente lo que quiero es que al momento de restar las fechas crear una sentencia que lea el resultado de las fechas que se encuentra en la columna DIASCREDITO que bien sea de paso no es mas que un resultado de un DATEDIFF y asigne valores X si el valor se encuentra entre un >= y un <=.

Pero mi sql me arroja el siguiente error no se si lo estoy haciendo bien porque no conozco mucho de sql pero creo estarlo intentando.

Error en la lista de argumentos de función: no se reconoce 'CASE'.
Error en la lista de argumentos de función: no se reconoce 'WHEN'.
No se puede analizar el texto de la consulta.

Por ultimo muestra un cuadro que dice SINTAXIS INCORRECTA CERCA DE LA PALABRA CASE.



Ayuda please
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Ayuda con codigo de consulta

Publicado por Angel (15 intervenciones) el 16/11/2016 01:24:56
la sintaxis de Case es la siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
USE AdventureWorks2012;
GO
SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber;
GO

Sin paréntesis entre Case y End y el ELSE se utiliza con una opción final, debe de mostrar algo, o a este esto, o lo otro, o lo otro y sino..... hara esto.

Espero te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con codigo de consulta

Publicado por jhonatan ruiz (4 intervenciones) el 19/11/2016 16:27:00
Si muchísimas gracias ese mismo día logre hacerlo minutos después de que enviara el mensaje de hecho mi código final quedo así.


SELECT dbo.SAPAGCXC.TipoCxc, dbo.SAPAGCXC.Monto AS [MONTO PAGADO], dbo.SAPAGCXC.Descrip AS [DETALLE DEL PAGO], dbo.SAPAGCXC.EsReten AS [TIENE RET],
dbo.SAPAGCXC.BaseReten AS [BASE RET PAG], dbo.SAPAGCXC.BaseImpo AS [BASE IMP PAG], dbo.SAPAGCXC.TExento AS [P EXENTO PAGO],
dbo.SAPAGCXC.MtoTax AS [MONTO IVA PAGO], dbo.SAACXC.NumeroN AS [NUMERO FACT], dbo.SAFACT.TipoFac AS [TIPO DE DOC],
dbo.SAFACT.NumeroD AS [NUMERO F], dbo.SAFACT.Monto AS [MONTO ORIGINAL], dbo.SAFACT.FechaE AS [FECHA FACT],
dbo.SAPAGCXC.FechaE AS [FECHA DEL PAGO], dbo.SAACXC.CodVend AS [CODIG VEND], dbo.SAACXC.TipoCxc AS [TIPO CXC], dbo.SAFACT.MtoTax,
dbo.SAFACT.MtoTotal, dbo.SAACXC.NumeroD, dbo.SAFACT.CodClie, dbo.SAFACT.Descrip, DATEDIFF(d, dbo.SAFACT.FechaE, dbo.SAPAGCXC.FechaE) AS DIASCREDITO,
CASE WHEN DATEDIFF(d, dbo.SAFACT.FechaE, dbo.SAPAGCXC.FechaE) >= 0 AND DATEDIFF(d, dbo.SAFACT.FechaE, dbo.SAPAGCXC.FechaE)
<= 3 THEN 3.5 WHEN DATEDIFF(d, dbo.SAFACT.FechaE, dbo.SAPAGCXC.FechaE) >= 4 AND DATEDIFF(d, dbo.SAFACT.FechaE, dbo.SAPAGCXC.FechaE)
<= 7 THEN 3.25 WHEN DATEDIFF(d, dbo.SAFACT.FechaE, dbo.SAPAGCXC.FechaE) >= 8 AND DATEDIFF(d, dbo.SAFACT.FechaE, dbo.SAPAGCXC.FechaE)
<= 14 THEN 3 WHEN DATEDIFF(d, dbo.SAFACT.FechaE, dbo.SAPAGCXC.FechaE) >= 15 AND DATEDIFF(d, dbo.SAFACT.FechaE, dbo.SAPAGCXC.FechaE)
<= 30 THEN 2 WHEN DATEDIFF(d, dbo.SAFACT.FechaE, dbo.SAPAGCXC.FechaE) >= 31 AND DATEDIFF(d, dbo.SAFACT.FechaE, dbo.SAPAGCXC.FechaE)
<= 30000000 THEN 0 ELSE NULL END AS [% DE COMISION], dbo.SAACXC.MtoTax AS [IVA SOBRE PAGO]
FROM dbo.SAPAGCXC INNER JOIN
dbo.SAACXC ON dbo.SAPAGCXC.NroPpal = dbo.SAACXC.NroUnico INNER JOIN
dbo.SAFACT ON dbo.SAACXC.NumeroN = dbo.SAFACT.NumeroD
WHERE (dbo.SAPAGCXC.TipoCxc = '10')

Por lo que fue genial y emosionante el echo de quepude construir mi primera vista SQL SERVER sin ayuda de asistente de software solo documentan dome con la condicional CASE gracias muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar