(13-12-2015 22:22)DarkCrazy escribió: Me dan una mano con esta?
1a) Si existe un select dentro de una cláusula HAVING, este debe devolver 1 fila y 1 columna
Dado el caso de que se pueda usar ANY/ALL/EXISTS/NOT EXISTS en el HAVING, ya sería falsa, pero no sé si se pude y no logro que se me ocurra un ejemplo para probar. Probé uno con ANY y no me compiló.
Si alguno tiene un link o archivo donde diga bien y completo que se puede hacer dentro de cada statement (where, having...) se agradece mucho!
Otra cosa, esto no está mal por dos motivos?
HAVING T1.t1_id IN (select T3.t3_id from T3 order by T3.t3_col2)
Primero me parece que tendría que ir en el WHERE, segundo, se puede usar el IN así? El IN no se usa así? campo1 IN (valor1,valor2,valor3) ? O funciona con un select también? En caso de que sí, compara contra cada registro devuelto por el select no? Tendría que devolver un solo campo por registro... no?
Yo creo que no es con IN sino con ANY: T1.t1 = ANY (select ..)
Saludos!
PD: En las subconsultas sí se pueden poner order by, al menos en SQL Server 2008, claro que siempre que hacia esto, mi select tenía un TOP 1 y devolvía además una sola columna. En la del ejemplo particularmente no se usa TOP así que puede ser que ahí rompa también por eso.
El IN se puede usar de esa manera, y también de la manera que vos detallas.
La de V o F es verdadero, ya que te deja usarlo el having de esa manera (aunque es poco feliz).
Ejecuté esta query y me devolvió resultados:
select cuil, sum(importe) from valores
group by cuil
having cuil in (99999999)
99999999 44071.18
La respuesta es SI, el IN con el select se fija si el campo seleccionado se encuentra en el select que se le detalla.
Tampoco te deja agregar el order by en subconsultas, ya que te arroja el siguiente error "La cláusula ORDER BY no es válida en vistas, funciones insertadas, tablas derivadas, subconsultas ni expresiones de tabla común, salvo que se especifique también TOP, OFFSET o FOR XML." (Esto es en SQL 2012)