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.partitionsy sys.allocation_unitsdepende 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 CASEdeclaració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
CASEexpresión devuelve un valor de laTHENparte 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. (SiBOOLEANse tratara de un tipo de datos, la prueba de igualdad tendría sentido).fuente
= 1a= 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 joinsignifica 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". UsarORes simplemente una forma de implementarlo.ORy 2ANDso 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