2012-07-28 3 views
0

J'ai donc les suivantes:Prendre requête T-SQL dans une autre requête et trouver des correspondances

SELECT 
    data, 
    encrypteddata, 
    CONVERT(varchar, DecryptByKey(encrypteddata)) AS 'decrypteddata' 
FROM table 

Compte tenu de la clé, il transmet la colonne de données d'origine, colonne de données chiffrées et de la colonne de données déchiffré comme une colonne de température. Tout bon.

Ce que j'ai essayé de faire est d'obtenir ce résultat, et juste faire une autre colonne AS et dire Match avec vrai ou faux si c'est une correspondance ou non.

J'ai essayé

SELECT 
    data, 
    encrypteddata, 
    CONVERT(varchar, DecryptByKey(encrypteddata)) AS 'decrypteddata' 
    COUNT(distinct(decrypteddata)) 
FROM table 
WHERE COUNT (distinct(decrypteddata)) > 1 
GROUP BY data 

Ce me donne une erreur lors de la première COUNT sur la syntaxe.

Quelqu'un at-il une suggestion comment je pourrais le faire?

+0

Serait-il suffisant de compter le champ encrypteddata à la place? Cela simplifierait un peu la requête, et il semblerait que cela donnerait le même résultat, en supposant que la fonction DecryptByKey soit déterministe. –

+0

Il vous manque un seul ',' après le 'AS 'decrypteddata'' dans votre deuxième requête - c'est pourquoi vous obtenez une erreur de syntaxe. –

+0

Vous devez TOUJOURS utiliser une longueur lors de la conversion/conversion de valeurs. Donc, utilisez quelque chose comme varchar (255), pour être sûr que votre conversion fonctionne correctement. –

Répondre

0

essayez ceci

SELECT 
data, 
encrypteddata, 
CONVERT(varchar, DecryptByKey(encrypteddata)) AS 'decrypteddata', 
COUNT(distinct(decrypteddata)) 
FROM table 
WHERE COUNT (distinct(decrypteddata)) >1 group by data 

- Ici vous avez utilisé la fonction de conversion - Dans ce que vous avez utilisé juste varchar sans paramètre de longueur Donc, si vos données réelles sont de plus de 30 caractères, cela ne prendra que 30 caractères et le reste sera tronqué. Assurez-vous simplement quelle serait la longueur de vos données réelles.

0

Je vois que vous manquez deux points à la fin de cette ligne

CONVERT(varchar, DecryptByKey(encrypteddata)) AS 'decrypteddata' 

Aussi, je n'obtiens pas tout à fait ce que vous essayez de faire correspondre, mais envisager d'utiliser IF pour que

SELECT 
IF(CONVERT(varchar, DecryptByKey(encrypteddata))=other_data_field, 'true','false') as Match 
....