La siguiente imagen es parte de las Vistas del sistema de Microsoft SQL Server 2008 R2. De la imagen podemos ver que la relación entre sys.partitions
y sys.allocation_units
depende del valor de sys.allocation_units.type
. Entonces, para unirlos, escribiría algo similar a esto:
SELECT *
FROM sys.indexes i
JOIN sys.partitions p
ON i.index_id = p.index_id
JOIN sys.allocation_units a
ON CASE
WHEN a.type IN (1, 3)
THEN a.container_id = p.hobt_id
WHEN a.type IN (2)
THEN a.container_id = p.partition_id
END
Pero el código superior da un error de sintaxis. Supongo que es por la CASE
declaración. ¿Alguien puede ayudar a explicar un poco?
Añadir mensaje de error:
Mensaje 102, Nivel 15, Estado 1, Línea 6 Sintaxis incorrecta cerca de '='.
sql
sql-server
join
case
Solo un alumno
fuente
fuente
Respuestas:
Una
CASE
expresión devuelve un valor de laTHEN
parte de la cláusula. Podrías usarlo así:Tenga en cuenta que debe hacer algo con el valor devuelto, por ejemplo, compárelo con 1. Su declaración intentó devolver el valor de una asignación o prueba de igualdad, ninguno de los cuales tiene sentido en el contexto de una cláusula
CASE
/THEN
. (SiBOOLEAN
se tratara de un tipo de datos, la prueba de igualdad tendría sentido).fuente
= 1
a= 0
, pero no creo que le guste el resultado.Le sugiero que vaya a través de este enlace Uniones condicionales en SQL Server y T-SQL Case Statement en una cláusula JOIN ON
p.ej
Editar: según los comentarios.
fuente
conditional join
significa Cada unión (excluyendo cruz) es condicional. ¿Cómo es este caso diferente de cualquier otro? Su muestra tiene unión interna con condición, así como la consulta de OP tiene unión con condición.OR
?OR
". UsarOR
es simplemente una forma de implementarlo.OR
y 2ANDs
o con 1CASE
. Es una consulta de rutina que no tiene nada que la diferencie de ninguna otra.Prueba esto:
fuente
Creo que necesita dos declaraciones de caso:
Esto es porque:
fuente
Tomé tu ejemplo y lo edité:
fuente
Esto parece agradable
https://bytes.com/topic/sql-server/answers/881862-joining-different-tables-based-condition
fuente
Sí tu puedes. Aquí hay un ejemplo.
fuente
Tomó el ejemplo de DonkeyKong.
El problema es que necesitaba usar una variable declarada. Esto permite indicar su lado izquierdo y derecho de lo que necesita comparar. Esto es para respaldar un informe SSRS donde se deben vincular diferentes campos según la selección realizada por el usuario.
El caso inicial establece la elección del campo en función de la selección y luego puedo configurar el campo con el que necesito hacer coincidir la unión.
Se podría agregar una segunda declaración de caso para el lado derecho si se necesita la variable para elegir entre diferentes campos
fuente
Aquí he comparado la diferencia en dos conjuntos de resultados diferentes:
fuente