contar/seleccionar consulta en MS Sql Server 2005
Frecuentes
Visto 1,325 veces
0
Tengo una tabla heredada que contiene registros "maestros" y registros de detalles asociados. Los registros de detalle se identifican mediante una adición a la clave maestra de "-nnn". Necesito encontrar registros maestros que no tengan registros de detalles, probé varias variaciones y finalmente los dividí en elementos más simples.
Esto funciona:
select (select count(*) from dbo.client as cl2
where cl2.acct_no like (cl1.acct_no + '-%')) as countx, acct_no
from dbo.client as cl1
y muestra los resultados esperados de cero o distintos de cero, según la cantidad de registros de detalle que haya.
Sin embargo, cuando trato de usar los resultados del conteo para seleccionar solo los registros con cero registros de detalle, así:
select (select count(*) from dbo.client as cl2
where cl2.acct_no like (cl1.acct_no + '-%')) as countx, acct_no
from dbo.client as cl1
where countx = 0
Recibo un error: "Nombre de columna no válido 'countx'"
¿Que me estoy perdiendo aqui?
2 Respuestas
1
CountX no es una columna con nombre.
Puede que esta no sea la forma más óptima, pero envolver toda la consulta podría funcionar.
SELECT CountX, Acct_No
FROM
(
select (select count(*) from dbo.client as cl2
where cl2.acct_no like (cl1.acct_no + '-%')) as countx, acct_no
from dbo.client as cli
) As InnerQuery
where countx = 0
Editar
Mirando esto, puede lograrse mejor usando un Join, en lugar de ese Select anidado.
SELECT cl1.acct_no, Count(*)
FROM dbo.client cl1 --the master key numbers
INNER JOIN dbo.client cl2 --the sub-keys
ON cl1.acct_no NOT LIKE '%-%' --No dashes in the MasterKey
AND cl1.acct_no LIKE (cl2.acct_no + '-%')
GROUP BY cl1.acct_no
contestado el 22 de mayo de 12 a las 15:05
Hmmm... Entonces, ¿puedo usar nombres de columna pero no alias de columna en una cláusula where? Su consulta funcionó una vez que cambié 'cli' a 'cl1' en el segundo 'from'... gracias; eso me ayuda a comenzar con mi consulta real. - JESii
0
Intenta usar in
para conseguir lo que quieres
select Acct_No from dbo.client where Acct_No not in
(
select acct_no from dbo.client where acct_no like acct_no + '-%'
)
contestado el 22 de mayo de 12 a las 15:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas sql sql-server sql-server-2005 or haz tu propia pregunta.
no puede usar el alias de columna en la cláusula where. Ese es el error. - Rahul