2011-03-16 83 views
0

我正在连接两个表并进行简单的计数,但似乎无法将连接的键变量重命名为更适合这两个表的某些内容,但我一直收到错误“CUSTOMER_NO”在使用它的上下文中是有效的。'我敢肯定,这只是一个小语法错误,但我不能看到它... ...SQL语法问题

SELECT owner_no AS customer_no, 

CASE 
WHEN customer_no BETWEEN 5000 and 5999 THEN 'RENTER' 
WHEN customer_no BETWEEN 6000 and 6999 THEN 'OWNER' 
END AS customer_type 

FROM owner_phone AS op 
INNER JOIN renter_phone AS rp ON op.owner_no = rp.renter_no 

GROUP BY customer_no 
HAVING COUNT(*) > 1; 

回答

3

在您的CASE和GROUP BY中使用实际列名称,而不是别名列名称。

CASE 
WHEN owner_no BETWEEN 5000 and 5999 THEN 'RENTER' 
WHEN owner_no BETWEEN 6000 and 6999 THEN 'OWNER' 
END AS customer_type 

FROM owner_phone AS op 
INNER JOIN renter_phone AS rp ON op.owner_no = rp.renter_no 
GROUP BY owner_no 
HAVING Count(*) > 1; 
+0

@jimconstable:你们都对,谢谢。第二个最小问题,如果owner_no和renter_no包含不同的值,我应该使用union函数而不是内部联接正确吗? – Eric

+0

@Eric,连接owner_no和renter_no。它是建筑物ID,地址还是别的?也许您可以发布一个显示数据库架构的新问题,一些示例数据以及您希望达到的结果,并且我们可以帮助您实现目标。 –

2

你必须使用OWNER_NO通过您的查询的其余部分,但离开AS CUSTOMER_NO使该列名。

SELECT owner_no AS customer_no, 
CASE 
    WHEN owner_no BETWEEN 5000 and 5999 THEN 'RENTER' 
    WHEN owner_no BETWEEN 6000 and 6999 THEN 'OWNER' 
END AS customer_type 
FROM owner_phone AS op 
INNER JOIN renter_phone AS rp ON op.owner_no = rp.renter_no 
GROUP BY owner_no 
HAVING COUNT(*) > 1;