2013-07-01 4 views
0

Я привык к mysql, когда вы можете сделать это без проблем. Я хотел бы запустить следующий оператор в SQL Server, но он не видит столбец C_COUNT.Как сравнить две строки в 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] 

Можно ли использовать любые математические операции в SELECT области как

SELECT (CUSTOMERS - C_COUNT) AS DIFFERENCE 

ответ

5

SQL Server не позволяет использовать псевдонимы в пункте WHERE. Вы должны иметь что-то вроде этого:

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] 

Или, еще лучше, устраняя количество инлайн:

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

Альтернативно : скопировать/вставить коррелированный подзапрос. –

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

Полностью тестировался ....

(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 
Смежные вопросы