2013-07-01 8 views
0

Je suis habitué à mysql quand vous pouvez le faire sans problèmes. Je voudrais exécuter l'instruction suivante dans SQL Server mais il ne voit pas la colonne C_COUNT.Comment comparer deux lignes dans SQL Server

SELECT 
    A.customers AS CUSTOMERS, 
    (SELECT COUNT(ID) FROM Partners_customers B WHERE A.ID = B.PIID) AS C_COUNT 
FROM Partners A 
WHERE CUSTOMERS <> [C_COUNT] 

Est-il possible d'utiliser toutes les opérations mathématiques dans la région SELECT comme

SELECT (CUSTOMERS - C_COUNT) AS DIFFERENCE 

Répondre

5

SQL Server ne vous permet pas d'utiliser les alias dans la clause WHERE. Vous devez avoir quelque chose comme ceci:

SELECT *, Customers - C_COUNT "Difference" 
FROM (
    SELECT 
    A.customers AS CUSTOMERS, 
    (SELECT COUNT(ID) 
    FROM Partners_customers B WHERE A.ID = B.PIID) 
    AS C_COUNT FROM Partners A 
) t 
WHERE CUSTOMERS <> [C_COUNT] 

Ou, mieux encore, en éliminant un nombre en ligne:

select A.customers, count(b.id) 
FROM Partners A 
LEFT JOIN Partners_customers B ON A.ID = B.PIID 
Group By A.ID 
having a.customers <> count(b.id) 
+0

Alternativement : copiez/collez la sous-requête corrélée. –

0
WITH A AS 
(
    SELECT 
     A.customers AS CUSTOMERS, 
     (SELECT COUNT(ID) FROM Partners_customers B WHERE A.ID = B.PIID) AS C_COUNT 
    FROM Partners A 
    WHERE CUSTOMERS <> [C_COUNT] 
) 
SELECT 
    *, 
    (CUSTOMERS - C_COUNT) AS DIFFERENCE 
FROM A 
0

complètement non testé ....

(select * from TabA 
minus 
select * from TabB) -- Rows in TabA not in TabB 
union all 
( 
select * from TabB 
minus 
select * from TabA 
) -- rows in TabB not in TabA 
Questions connexes