SELECT CASE WHEN $[$1.U_VAH_FormCode.$] IS NOT NULL THEN $[$1.6.$] = 'Empresa' END
Me dá constantemente el siguiente error:
1). [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near '='.
2). [Microsoft][SQL Server Native Client 11.0][SQL Server]Statement '' (SWEI) (s) could not be prepared.
He probado a cambiar las comillas simples por dobles, a jugar con los espacios, a añadir coma entre el NULL y el THEN y todo con idéntico resultado.
Os dejo capturas de la info del sistema de esos campos
Eso es porque lo cogí de otra búsqueda, pero he probado a usar $[$1.6.0] y el resultado es el mismo.
De todas formas, NO TENGO NI IDEA DE SQL más allá de lo que estoy aprendiendo sobre la marcha, y sinceramente referenciar columnas me está trayendo bastantes dolores de cabeza.
Seguro que lo estoy escribiendo mal.
Si puedes sugerirme alguna sintaxis @juliancab para probar te lo agradezco
Se acerca, pero hay algo que no termina de funcionar, ahora dá igual si el campo Codigo Formación
está informado, selecciona siempre Empresa cuando ejecuto la búsqueda.
¿Podría necesitar usar un argumento tipo ELSE?
Para usarlo, lo suyo sería dejar el campo sin informar,
SELECT CASE WHEN $[$1.U_VAH_FormCode.0] IS NOT NULL THEN 'Empresa'
ELSE WHEN $[$1.U_VAH_FormCode.0] IS NULL THEN IS NULL END
Hola @juliancab sigue fallando…
Si lo dejo como SELECT CASE WHEN $[$1.U_VAH_FormCode.0] siempre informa EMPRESA
Si lo cambio a SELECT CASE WHEN $[$1.U_VAH_FormCode.$] no me selecciona nada al hacer la consulta
Sigo sin ver donde estoy cometiendo el error, y además me acabo de dar cuenta que otras BF relacionadas con ese campo (Codigo Formacion) me están empezando a fallar.
Le daré unos cuantos intentos más y espero encontrar el problema.
Gracias
Bueno, lo que ayude es en corregirte la sintaxis, pero nose cual seria tu requerimiento o coo deseas que funcione, si plasmas algunos ejemplos creo quedaria mas claro.
Hola @Ricardo_Quiro, en la búsqueda puse todos los argumentos, pero solo hice cambios en el SELECT: $[$1.U_VAH_FormCode.0]VS$[$1.U_VAH_FormCode.$]
Por eso no puse la BF completa.
De todas formas me acabas de dar la vida con este apunte:
En cualquier caso, se me está complicando bastante más este tema…
Inicialmente, el plan de formación lo creé como un UDO de Datos Maestros pero después de meditarlo un poco , pensé que sería mejor cambiarlo a UDO de tipo Documento
Así que borré todas las UDT y BF y creé todo de 0.
Al principio (cuando el plan de formación erá un UDO de tipo Datos Maestros) las BF que había creado me funcionaban bien, y fué cuando empecé a probar está búsqueda con condiciones.
Os dejo una captura para que veáis la estructura de todo esto (igual tenéis que abrirla en una pestaña nueva para poder verla bien, depende de la pantalla que estéis usando):
A continuación os indico las BF que tengo asignadas a los campos de la ventana de Formación (Que es una matriz incrustada en los datos maestros de empleado, vienen por defecto):
CAMPO
NOMBRE CAMPO
BF
HEM2,Institute
Instituto
SELECT T0.[U_VAH_FormFor] FROM [dbo].[@VAH_FORMPLAN] T0 INNER JOIN [dbo].[HEM2] T1 ON T0.[DocNum] = T1.[U_VAH_FormCode] WHERE T0.[DocNum] = $[$1.U_VAH_FormCode.0]
HEM2,fromDate
De fecha
SELECT T0.[U_VAH_FormStrt] AS 'Fecha inicio' FROM [dbo].[@VAH_FORMPLAN] T0 INNER JOIN [dbo].[HEM2] T1 ON T0.[DocNum] = T1.[U_VAH_FormCode] WHERE T0.[DocNum] = $[$1.U_VAH_FormCode.0]
HEM2,toDate
A
SELECT T0.[U_VAH_FormEnd] AS 'Fecha finalización' FROM [dbo].[@VAH_FORMPLAN] T0 INNER JOIN [dbo].[HEM2] T1 ON T0.[DocNum] = T1.[U_VAH_FormCode] WHERE T0.[DocNum] = $[$1.U_VAH_FormCode.0]
HEM2,diploma
Titulo de licenciatura
SELECT T0.[U_VAH_FormName] AS 'Denominacion' FROM [dbo].[@VAH_FORMPLAN] T0 INNER JOIN [dbo].[HEM2] T1 ON T0.[DocNum] = T1.[U_VAH_FormCode] WHERE T0.[DocNum] = $[$1.U_VAH_FormCode.0]
HEM2,type
Clase de Formacion
SELECT CASE WHEN $[$1.U_VAH_FormCode.0] IS NOT NULL THEN 'Empresa' ELSE NULL END
Pues ahora ocurre esto al ejecutar cualquiera de las BF:
Parece como si en las que tiene que arrastrar el valor desde el UDO, me mostrase todos los registros que ya están en otras fichas de empleado.
Y en la BF que me indicó @juliancab siempre toma el valor Empresa, independientemente del valor dado en Código de formación.
La verdad que me estoy quedando un poco estancado en este punto…
¿Puede tener que ver con que un mismo documento pueda estar asignado a varias matrices de formación? ¿Hay alguna sintaxis adicional, específica para matrices, aparte de las dos que me has indicado @Ricardo_Quiro?
Se me ocurre que pueda venir por ahí el error…
De cualquier forma, muchas gracias a los dos por vuestros comentarios.
Un saludo
SELECT T0.[U_VAH_FormFor] FROM [dbo].[@VAH_FORMPLAN] T0 , [dbo].[HEM2] T1 WHERE $[$1.U_VAH_FormCode.0] = T0.[DocNum] AND $[$1.0.0] = T1.[line]
HEM2,fromDate
SELECT T0.[U_VAH_FormStrt] FROM [dbo].[@VAH_FORMPLAN] T0 , [dbo].[HEM2] T1 WHERE $[$1.U_VAH_FormCode.0] = T0.[DocNum] AND $[$1.0.0] = T1.[line]
HEM2,toDate
SELECT T0.[U_VAH_FormEnd] FROM [dbo].[@VAH_FORMPLAN] T0 , [dbo].[HEM2] T1 WHERE $[$1.U_VAH_FormCode.0] = T0.[DocNum] AND $[$1.0.0] = T1.[line]
HEM2,diploma
SELECT T0.[U_VAH_FormName] FROM [dbo].[@VAH_FORMPLAN] T0 , [dbo].[HEM2] T1 WHERE $[$1.U_VAH_FormCode.0] = T0.[DocNum] AND $[$1.0.0] = T1.[line]
Quitando el JOIN y añadiendo:
AND $[$1.0.0] = T1.[line]
Ya selecciona el registro automáticamente en esos campos.
Pero la BF con condiciones sigue sin funcionar.
Hay alguna forma de meter un WHERE dentro del CASE?
He probado esto:
SELECT CASE WHEN $[$1.U_VAH_FormCode.0] IS NOT NULL
WHERE $[$1.U_VAH_FormCode.0] = T0.[DocNum] AND $[$1.0.0] = T1.[line]
THEN 'Empresa' ELSE NULL END
Pero me dá error de sintaxis en WHERE: 1). [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near the keyword 'WHERE'. 2). [Microsoft][SQL Server Native Client 11.0][SQL Server]Statement '' (SWEI) (s) could not be prepared.