Permet de considérer que j'ai une table 'onglet' qui a une colonne 'col'
the table 'onglet' a cette donnée - p> si j'ai un ensemble de valeurs (2,3,6,7). Je peux interroger les valeurs présentes dans la table et la liste en poursuivant la requête p> mais, si je veux renvoyer les valeurs de la liste qui ne sont pas présentes dans la table à savoir seulement (6,7) dans ce cas. Quelle requête dois-je utiliser? P> p>
7 Réponses :
Une méthode est
Une manière d'utiliser une table Temp:
DECLARE @t1 TABLE (i INT) INSERT @t1 VALUES(2) INSERT @t1 VALUES(3) INSERT @t1 VALUES(6) INSERT @t1 VALUES(7) SELECT i FROM @t1 WHERE i NOT IN (Select Col from Tab)
J'ai utilisé un exemple ici pour la simplicité. En fait, je m'occupe d'environ 70 valeurs. Écrire 70 insérences déclarations n'est pas vraiment pratique. Je me demande s'il y a un moyen plus simple de le faire. Merci pour la réponse quand même.
Méthode SQL Server 2008
DECLARE @Values XML
SET @Values =
'<r>
<v>2</v>
<v>3</v>
<v>6</v>
<v>7</v>
</r>'
SELECT
vals.item.value('.[1]', 'INT') AS Val
FROM @Values.nodes('/r/v') vals(item)
EXCEPT
Select Col from Tab
Avez-vous une table [numéros] dans votre base de données? (Voir
Merci d'avoir répondu. Je n'étais pas au courant de cela. Mais, j'ai utilisé un exemple ici pour la simplicité. En fait, je traite de Varcharne et non de chiffres.
Le problème, je crois que vous essayez de trouver des valeurs de votre part dans la déclaration. Ce que vous devez faire est de transformer votre instruction dans une table, puis vous pouvez déterminer quelles valeurs sont différentes.
select
id
from
dbo.SplitStringToTable('2,3,6,7')
where
not exists (select 1 from Tab where Col = id)
J'ai utilisé un exemple ici pour la simplicité. En fait, je m'occupe d'environ 70 valeurs. Écrire 70 insérences déclarations n'est pas vraiment pratique. Je me demande s'il y a un moyen plus simple de le faire. Merci pour la réponse quand même.
Comment déterminez-vous les valeurs?
Je suis désolé d'ajouter le commentaire avant d'essayer la dernière partie de votre réponse, c'est-à-dire de créer une fonction de valorisation de la table pour activer la chaîne séparée des virgules en une table. J'ai essayé cela maintenant, il devient simple une fois que je reçois la liste des valeurs dans une table. Merci.
Excellent, heureux d'avoir pu aider.
Je pense qu'il y a beaucoup de façons d'y parvenir, voici un.
en retard à la fête ...
SELECT
'2s' = SUM(CASE WHEN Tab.Col = 2 THEN 1 ELSE 0 END),
'3s' = SUM(CASE WHEN Tab.Col = 3 THEN 1 ELSE 0 END),
'6s' = SUM(CASE WHEN Tab.Col = 6 THEN 1 ELSE 0 END),
'7s' = SUM(CASE WHEN Tab.Col = 7 THEN 1 ELSE 0 END)
FROM
(SELECT 1 AS Col, 'Nums' = 1 UNION SELECT 2 AS Col,'Nums' = 1 UNION SELECT 3 AS Col, 'Nums' = 1 UNION SELECT 4 AS Col, 'Nums' = 1 UNION SELECT 5 AS Col, 'Nums' = 1 ) AS Tab
GROUP BY Tab.Nums
Sur quelle version et quelle version êtes-vous?
Dans les commentaires, vous avez annexé à diverses réponses, je vois que vous traitez avec des valeurs de chaîne, non des entiers et que votre liste d'entrée contient quelque part dans le voisinage de 70 valeurs. Cherchez-vous à écrire une procédure stockée? En utilisant SQL généré par dynamisme? Query paramétré? Comme Martin demanda, quelle plate-forme et la version DB travaillez-vous? Cela nous dira de savoir quel ensemble de caractéristiques nous devons travailler avec. (XML, UDF, etc.) est une option LINQ-> SQL?
@Martin je travaille sur SQL Server 2005. @toby, j'essaie simplement d'utiliser une requête SQL pour récupérer les lignes qui répondent aux conditions que j'ai mentionnées dans la question.