¿Hay alguna manera de solo SELECTfilas con ciertos datos en una columna, sin usar WHERE?
Por ejemplo, si tuviera esto:
SELECT * FROM Users
WHERE town = 'Townsville'
¿Hay alguna manera de implementar la WHEREcláusula en la SELECTdeclaración?
algo como
SELECT *, town('Townsville') FROM Users
Es una pregunta extraña pero es una pregunta que me han hecho mis compañeros.
sql-server
Josh Stevenson
fuente
fuente

Respuestas:
No estoy seguro si este es el tipo de locura que estabas buscando ...
Descargo de responsabilidad : no tengo absolutamente ninguna idea de por qué querrías usar esto.
fuente
Datos
Soluciones alternativas
Retener duplicados
Salida:
Para el ejemplo final:
Pruébalo aquí: Stack Exchange Data Explorer
fuente
GROUP BYsoluciones, también puede agregar el PK en el grupo por lista (para estar 100% seguro de que las consultas devuelven el mismo número de filas que WHERE). Suponiendo, por supuesto, que hay un PK;)De otra manera.
( Reutilizando los datos de ejemplo de Paul White )
fuente
"Solo por diversión" puedes usar un
order bycontop(1) with tiesEsto ordenará todas las filas con
Townsvilleprimero ya que el caso devuelve1iftown = 'Townsville'. Todas las demás filas tendrán un2retorno por el caso.La
with tiescláusula hace que la consulta devuelva todas las filas que son un "empate" para el último lugar en las filas devueltas. El usotop(1)en combinación conwith tiesdevolverá todas las filas que tengan el mismo valor que la primera fila en la expresión utilizada en el orden por cláusula.Tenga en cuenta que, como Martin Smith señaló en un comentario, devolverá todas las filas si solicita una ciudad que no existe en la tabla.
Si no le temes a las cosas XML de las bases de datos, puedes usar un predicado en la función de nodos ().
Préstamo de la configuración de Paul White.
Otra versión con
topyorder byque realmente funciona cuando se buscan ciudades no existentes.fuente
Tienes dos cosas diferentes aquí.
Restringirá la cantidad de filas que regresará a aquellas donde town =
TownsvilleVa a pasar el literal
Townsvillea una función llamadatown. No restringirá las filas devueltas por la consulta y, de hecho, si la función devuelve algo más que un solo valor, obtendrá un error.Hay otras formas de restringir el número de filas que obtiene de una consulta. La cláusula HAVING, por ejemplo. Pero tiene varios otros requisitos.
O un INNER JOIN, aunque este es un poco extraño si no tienes una segunda mesa.
fuente
Aquí hay un ejemplo que usa una expresión de tabla común (CTE).
fuente
Bueno, podrías hacer esto:
Estrictamente hablando, no estás usando la cláusula WHERE
fuente
Aquí hay una forma
idiotacompletamente lógica de hacerlo que aún no veo ...No puedo imaginar por qué esto no fue lo primero que se sugirió. :)
fuente
Todas las ciudades además de Townsville serían nulas. Problema resuelto.
fuente