Desarrollo
>
ASP.NET
Pregunta
-
Inicie sesión para votar
Hola buen dia, tengo un problema en una consulta que uso con UNION, al parecer es porque los tipos de datos no son iguales
"ID_M" es NUMBER y "CLAVE" es VARCHAR2
Esta es mi consulta
Select 'tabla1' TABLA, CLAVE, 'ID_M' Campo,'ID_M' Consulta, ID_M as Valor,count(1) cnt from tabla1 where ID_M is null or ID_M=0 group by CLAVE, ID_MUNIONSelect 'tabla1' TABLA, CLAVE, 'CLAVE' Campo,'CLAVE' Consulta, CLAVE as Valor,count(1) cnt from tabla1 where CLAVE is null group by CLAVE, CLAVE;
y me arroja este error:
""ORA-01790: la expresión debe tener el mismo tipo de dato que la expresión correspondiente""
""01790. 00000 - "expression must have same datatype as corresponding expression"""
""*Cause: ""
""*Action: ""Trate de convertir el campo de tipo Number a Varchar con ejemplos que encontre que utilizar la funcion TO_CHAR, pero lo convierte
Select TO_CHAR ('tabla1' TABLA, CLAVE, 'ID_M' Campo,'ID_M' Consulta, ID_M as Valor,count(1) cnt) from tabla1 where ID_M is null or ID_M=0 group by CLAVE, ID_MUNIONSelect 'tabla1' TABLA, CLAVE, 'CLAVE' Campo,'CLAVE' Consulta, CLAVE as Valor,count(1) cnt from tabla1 where CLAVE is null group by CLAVE, CLAVE;
He hecho mas consultas con mismo tipo de dato y si funciona corractamente, el problema es cuando hay datos con diferente tipo de datos
Alguien me podria guiar en que esta mal mi consulta por favor
- Editado Jaime Ortega E_ viernes, 10 de mayo de 2019 15:41 ERROR EN LINEA DE CODIGO
viernes, 10 de mayo de 2019 15:39
Responder
|
Citar
Respuestas
- 1
Inicie sesión para votar
(Video) Tutorial#45 TO_NUMBER function | Convert varchar value into number formatAdicional
Intenta formar la consulta con un formato concreto, normalmente se usa el estándar ANSI 92, te hará evitar errores.
Select 'tabla' AS Tabla
los alias de tabla con AS, pero sobre todo que significa dos veces clave en el group by del segundo conjunto.
Es posible, que no este correctamente formado.
¿Qué es ID_M? Si es una columna, supongo que cuando se refiere al alias Consulta, no debiera de ir con apóstrofes.
Además tienes un paréntesis de más. Voy a suponer que es una columna al igual que Clave.
Suponiendo que id_m y clave fueran de tipos diferentes, te los doy todos como varchar2(100), y si no te hace falta le quitas el cast.
SELECT 'tabla1' AS TABLA, cast(cveoper AS varchar2(100)) AS CveOper, cast(ID_M AS varchar2(100)) AS Campo, cast(ID_M AS varchar2(100)) AS Consulta, cast(ID_M AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM tabla1WHERE ID_M IS NULL OR ID_M = 0GROUP BY CLAVE , ID_M , cveoperUNIONSELECT 'tabla1' AS TABLA, cast(cveoper AS varchar2(100)) AS cveoper, cast(CLAVE AS varchar2(100)) AS Campo, cast(CLAVE AS varchar2(100)) AS Consulta, cast(CLAVE AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM tabla1WHERE CLAVE IS NULLGROUP BY CLAVE , cveoper;
See AlsoHibernate Community • View topicEsta puede ser una aproximación a tu consulta.
- Propuesto como respuesta eRiver1 viernes, 10 de mayo de 2019 17:09
- Marcado como respuesta Jaime Ortega E_ viernes, 10 de mayo de 2019 18:18
viernes, 10 de mayo de 2019 16:01
Responder
|
Citar
Todas las respuestas
- 1
Inicie sesión para votar
Hola Jaime Ortega E_
Tu consulta, quizá no debiera de ser en el foro de ASP.NET, ya que por el error te lo esta devolviendo una base de datos deORACLE, por tanto quizá el sitio más apropiado fuera o uno de los múltiples foros de Oracle, o elforo de ADO.NET
En cuanto a la consulta, prueba a realizarla, con CAST
Select 'tabla1', cast(cveoper as varchar(100)),.....
unión
Select 'tabla1', cast (cveoper as varchar(100)),....
Cada una de las columnas de cada uno de los conjuntos, debe de ser del mismo tipo. No la fila entera, sino , cada una de las columnas.
Puedes hacer un Select 1 unión Select 1, o Select cast(1 as varchar(10)) unión all Select '1' ya que las columnas son del mismo tipo.
OPERADOR CAST ORACLE
https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions016.htm
- Propuesto como respuesta eRiver1 viernes, 10 de mayo de 2019 17:09
(Video) SQL Convert Function - SQL Training Online - Quick Tips Ep7viernes, 10 de mayo de 2019 15:49
Responder
|
Citar
- 1
Inicie sesión para votar
Adicional
Intenta formar la consulta con un formato concreto, normalmente se usa el estándar ANSI 92, te hará evitar errores.
Select 'tabla' AS Tabla
los alias de tabla con AS, pero sobre todo que significa dos veces clave en el group by del segundo conjunto.
Es posible, que no este correctamente formado.
¿Qué es ID_M? Si es una columna, supongo que cuando se refiere al alias Consulta, no debiera de ir con apóstrofes.
Además tienes un paréntesis de más. Voy a suponer que es una columna al igual que Clave.
Suponiendo que id_m y clave fueran de tipos diferentes, te los doy todos como varchar2(100), y si no te hace falta le quitas el cast.
SELECT 'tabla1' AS TABLA, cast(cveoper AS varchar2(100)) AS CveOper, cast(ID_M AS varchar2(100)) AS Campo, cast(ID_M AS varchar2(100)) AS Consulta, cast(ID_M AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM tabla1WHERE ID_M IS NULL OR ID_M = 0GROUP BY CLAVE , ID_M , cveoperUNIONSELECT 'tabla1' AS TABLA, cast(cveoper AS varchar2(100)) AS cveoper, cast(CLAVE AS varchar2(100)) AS Campo, cast(CLAVE AS varchar2(100)) AS Consulta, cast(CLAVE AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM tabla1WHERE CLAVE IS NULLGROUP BY CLAVE , cveoper;
Esta puede ser una aproximación a tu consulta.
- Propuesto como respuesta eRiver1 viernes, 10 de mayo de 2019 17:09
- Marcado como respuesta Jaime Ortega E_ viernes, 10 de mayo de 2019 18:18
viernes, 10 de mayo de 2019 16:01
Responder
|
Citar
- (Video) Operadores SET en SQL
Inicie sesión para votar
HolaJaime Ortega E_,
Si de hecho el problema de tu consulta es que no sabes cómo realizar una union podria venirte bien darle una revisada a los tutos enhttps://www.w3schools.com/ ahora te comento que en Microsoft no se hace una clarificación de los conceptos mal aplicados.
Y te comento que dicha consulta tambien la puedes realizar enhttps://stackoverflow.com/ lo cuál te recomiendo ampliamente.
Por otro lado
El error como se indica reside en querer hacer un "cast" a CHAR.
No dudes en ampliar más sobre este tema si es que aún lo requirieras o de abrir una nueva consulta en caso de tener alguna situación o necesitarla con algún otro de los productos de Microsoft.
Adicional le invito a consultar los siguientes recursos:
Guía para formular preguntas en el foro
Channel 9- donde puedes encontrar una sección de: SQL Server
Gracias por usar los foros de TechNet.
Erick Rivera
____
Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.
Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.
Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.viernes, 10 de mayo de 2019 17:43
Responder
|
Citar
-
Inicie sesión para votar
Select 'SEG_LEV_PLAN' TABLA, cveoper, 'SEG' Campo,'SEG' Consulta, SEG as Valor,count(1) cnt from seg_lev_planwhere seg not in ('N','A','B','C','D','E','F','G','H','I','S') group by cveoper, SEGUNIONSelect 'SEG_LEV_PLAN' TABLA, cveoper, 'cveoper' Campo,'cveoper' Consulta, cveoper as Valor,count(1) cnt from seg_lev_plan where CVEOPER BETWEEN 0 AND 021111110 OR CVEOPER BETWEEN 331111123 AND 999999999 group by cveoper
Este es un ejemplo de una consulta que si me arroja resultados ya que ambos campos de la tabla son de tipo VARCHAR, les pongo alias porque se ocupan ciertas columnas con esos datos, me da de resultado esto:
TABLA CVEOPER CAMPO VALOR CONSULTA COUNT PLAN 12121212 SEG SEG x 1 PLAN 12121212 cveoper cveoper 12121212 1 PLAN 361111111 SEG SEG Q 1 PLAN 361111111 cveoper cveoper 361111111 1 En campo y valor me trae el nombre de la columna y en consulta el dato que tiene dentro, pero con la otra consulta me arroja el error por el tipo de dato, la acomode asi:
SELECT 'SEG_LEV_INM' AS TABLA, cast(cveoper AS varchar2(100)) AS CveOper, cast(ID_MZA AS varchar2(100)) AS Campo, cast(ID_MZA AS varchar2(100)) AS Consulta, cast(ID_MZA AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM SEG_LEV_INMWHERE ID_MZA IS NULL OR ID_MZA = 0GROUP BY cveoper, ID_MZAUNIONSELECT 'SEG_LEV_INM' AS TABLA, cast(cveoper AS varchar2(100)) AS cveoper, cast(CVEGEO AS varchar2(100)) AS Campo, cast(CVEGEO AS varchar2(100)) AS Consulta, cast(CVEGEO AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM SEG_LEV_INMWHERE cveoper IS NULLGROUP BY cveoper, CVEGEO;
pero me trae en valores 0
TABLA CVEOPER CAMPO VALOR CONSULTA COUNT SEG_LEV_INM 21111110 0 0 0 1 SEG_LEV_INM 21111123 0 0 0 1 Me ayudarias explicandome porque?
Y muchas gracias por el apoyo
viernes, 10 de mayo de 2019 18:08
Responder
|
Citar
(Video) Oracle CAST Function -
Inicie sesión para votar
Muchas gracias ya vi donde estaba mi error, usaba el cast cuando no era necesario, me ayudo mucho tu apoyo :)
al final asi quedo mi consulta
SELECT 'SEG_LEV_INM' AS TABLA, cast(cveoper AS varchar2(100)) AS CveOper, 'ID_MZA' Campo, 'ID_MZA' Consulta, cast(ID_MZA AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM SEG_LEV_INMWHERE ID_MZA IS NULL OR ID_MZA = 0GROUP BY cveoper, ID_MZAUNIONSELECT 'SEG_LEV_INM' AS TABLA, cast(cveoper AS varchar2(100)) AS cveoper, 'CVEGEO' Campo, 'CVEGEO' Consulta, cast(CVEGEO AS varchar2(100)) AS Valor, COUNT(1) AS cntFROM SEG_LEV_INMWHERE CVEGEO IS NULLGROUP BY cveoper, CVEGEO;
Te lo agradesco, excelente dia
viernes, 10 de mayo de 2019 18:19
Responder
|
Citar
- 1
Inicie sesión para votar
De nada
viernes, 10 de mayo de 2019 18:26
Responder
|
Citar
(Video) Oracle SQL Numeric Data Types | Oracle SQL fundamentals