¿Hay alguna manera de solo SELECT
filas 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 WHERE
cláusula en la SELECT
declaració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 BY
soluciones, 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 by
contop(1) with ties
Esto ordenará todas las filas con
Townsville
primero ya que el caso devuelve1
iftown = 'Townsville'
. Todas las demás filas tendrán un2
retorno por el caso.La
with ties
clá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 ties
devolverá 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
top
yorder by
que 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 =
Townsville
Va a pasar el literal
Townsville
a 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