2017-03-10 1 views
0

Je suis nouveau à T-SQL alors s'il vous plaît ours avec moi.problèmes de syntaxe concernant JOIN et WITH dans SQL Server Management Studio 2016

Je tente de suivre les instructions suivantes:

Est-ce que le

suivant
Join Indivs16000 to Cmtes16 on Indivs16000.CmteID = Cmtes16.CmteID 
with Indivs16000.RecipCode not like P* 

Si vous souhaitez inclure les contributions individuelles à PACs de direction, n'excluons pas basées sur Recipcode. Au lieu de cela, limiter à Indivs.Party n'est pas null et Indivs.Party <> "" (n'est pas égal à blanc.)

Je souhaite inclure des contributions individuelles au leadership PACS. Pour tenter de suivre les instructions que j'ai écrit la requête suivante:

JOIN Indivs16000 to Cmtes16 
ON Indivs16000.CmteID = Cmtes16.CmteID 
WITH Indivs16000.Party NOT NULL 
AND Indivs16000.Party<> 

Lors de l'exécution je frappe les erreurs suivantes:

Msg 156, Level 15, State 1, Line 5 
Incorrect syntax near the keyword 'Join'. 
Msg 319, Level 15, State 1, Line 7 
Incorrect syntax near the keyword 'with'. If this statement is a common table expression, an xmlnamespaces clause or a change tracking context clause, the previous statement must be terminated with a semicolon. 

Qu'est-ce qui ne va pas? J'utilise Microsoft SQL Server 2016 (Management Studio).

+1

https://en.wikipedia.org/wiki/Join_(SQL) – asemprini87

Répondre

3

Comme Sean Lange a souligné, i.Party<>'' ou i.Party > '' éliminer la nécessité de vérifier si i.Party est null.

Vous pouvez choisir les colonnes que vous souhaitez renvoyer et de quelle table elles doivent provenir, dans votre select. L'utilisation d'alias pour vos noms de tables rend les choses plus lisibles et vous évite de gaspiller votre finite number of keystrokes.

select 
    i.* 
    , c.col1 
    , c.col2 
from Indivs16000 as i 
    inner join Cmtes16 as c 
    on i.CmteID = c.CmteID 
where i.Party<>'' 
    --and i.Party is not null /* not needed with i.Party <>'' */ 
+0

Votre solution travaillé. Il semble que la table Indivs et la table Cmtes ont toutes deux partagé une colonne appelée Cycle (la valeur du cycle est toujours la même). Cela a provoqué ma requête pour me donner deux colonnes de cycle. C'est assez irritant. Pensez-vous que je peux éviter cela en remplaçant l'astérisque par la table.colonne (s) que je veux dans la nouvelle table afin que je puisse spécifier que je veux seulement une colonne de cycle? –

+0

Vous pouvez simplifier l'instruction where pour Indivs16000.Party> ''. Cela permettra d'éliminer les chaînes vides et vides en même temps. –

+0

@SeanLange Je pensais à ça, mais il semblait que c'était des devoirs alors je ne voulais pas changer sa réponse, juste corriger son formulaire. Bon point cependant! – SqlZim

1
SELECT * 
FROM 
Indivs16000 as A 
INNER JOIN 
Cmtes16 as B 
ON A.CmteID = B.CmteID 
WHERE AND A.Party != '' and A.Party is not null 
+0

Je ne viendrais "! =". Ce n'est pas ANSI-SQL. Utilisez "<>" à la place – asemprini87

+0

@ asemprini87 droite, je me suis habitué à utiliser dans SQL Server xD, même ISNULL, etc – LONG

+0

@ asemprini87 Ils sont équivalents dans Sql Server, pas besoin d'obtenir ANSI à ce sujet ^.^ – SqlZim