L'image suivante fait partie des vues système de Microsoft SQL Server 2008 R2. De l'image, nous pouvons voir que la relation entre sys.partitions
et sys.allocation_units
dépend de la valeur de sys.allocation_units.type
. Donc, pour les réunir, j'écrirais quelque chose de similaire à ceci:
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
Mais le code supérieur donne une erreur de syntaxe. Je suppose que c'est à cause de la CASE
déclaration. Quelqu'un peut-il aider à expliquer un peu?
Ajouter un message d'erreur:
Msg 102, niveau 15, état 1, ligne 6 Syntaxe incorrecte près de '='.
sql
sql-server
join
case
Juste un apprenant
la source
la source
Réponses:
Une
CASE
expression renvoie une valeur de laTHEN
partie de la clause. Vous pouvez l'utiliser ainsi:Notez que vous devez faire quelque chose avec la valeur retournée, par exemple la comparer à 1. Votre instruction a tenté de renvoyer la valeur d'une affectation ou d'un test d'égalité, aucun des deux n'a de sens dans le contexte d'une clause
CASE
/THEN
. (SiBOOLEAN
était un type de données, alors le test d'égalité aurait du sens.)la source
= 1
à= 0
, mais je ne pense pas que vous aimerez le résultat.Je vous suggère de passer par ce lien Jointures conditionnelles dans SQL Server et T-SQL Case Statement dans une clause JOIN ON
par exemple
Edit: selon les commentaires.
la source
conditional join
signifie? Chaque jointure (hors croisement) est une condition. En quoi ce cas est-il différent des autres? Votre exemple a une jointure interne avec une condition, et une requête OP a une jointure avec une condition.OR
?OR
". L'utilisationOR
n'est qu'une façon de le mettre en œuvre.OR
et 2ANDs
ou avec 1CASE
. C'est une requête de routine qui n'a rien qui la diffère des autres.Essaye ça:
la source
Je pense que vous avez besoin de deux déclarations de cas:
Ceci est dû au fait:
la source
J'ai pris votre exemple et je l'ai édité:
la source
Cela semble sympa
https://bytes.com/topic/sql-server/answers/881862-joining-different-tables-based-condition
la source
Oui, vous pouvez. Voici un exemple.
la source
Prenons l'exemple de DonkeyKong.
Le problème est que je devais utiliser une variable déclarée. Cela permet d'indiquer votre côté gauche et droit de ce que vous devez comparer. Il s'agit de prendre en charge un rapport SSRS dans lequel différents champs doivent être liés en fonction de la sélection par l'utilisateur.
Le cas initial définit le choix du champ en fonction de la sélection, puis je peux définir le champ que je dois associer pour la jointure.
Une deuxième déclaration de cas pourrait être ajoutée pour le côté droit si la variable est nécessaire pour choisir parmi différents champs
la source
Ici, j'ai comparé la différence entre deux ensembles de résultats différents:
la source