2016-11-14 70 views
-1

我想写一个查询,该查询搜索表的列并返回具有多个单词的别名的计数。我可以得到一些帮助我写一个SQL查询在表列中搜索多个单词

select 
    count(STREET_ADDRESS) AS MELBOURNE 
from 
    CUSTOMERS 
where 
    STREET_ADDRESS like '%MELBOURNE%' 

我试图做到这一点的多个城市在一个查询像Melbourne, Sydney, Auckland

+1

提供您的示例数据和预期结果 – Mansoor

+0

就像我在SQL中一起运行以下查询一样,它会分析出两种不同的预期结果。 我希望将这两个查询合并为一个,仍然可以得到相同的结果。 ****************************** select count(STREET_ADDRESS)AS MANGERE from CUSTOMERS where STREET_ADDRESS like'%MANGERE%' ******************************** 从客户处选择计数(STREET_ADDRESS)作为AVONDALE,其中STREET_ADDRESS为'%AVONDALE% ' – Vijay

回答

1

试试这个,SELECT COUNT(*) FROM CUSTOMERS WHERE STREET_ADDRESS IN ('MANGERE','AVONDALE')GROUP BY STREET_ADDRESS

+0

街道地址栏包含正确的地址,因此我必须使用通配符来搜索关键字。 – Vijay

+0

以下查询适用于我希望的工作。 感谢您的帮助:-) * ********************** SELECT DISTINCT(SUM(CASE WHERE STREET_ADDRESS LIKE'%MANGERE%'THEN 1 ())作为MANGERE_COUNT, (SUM(CASE当STREET_ADDRESS LIKE'%AVONDALE%'THEN 1 ELSE 0 END)ON AVONDALE_COUNT, FROM CUSTOMERS – Vijay

+0

@ Mansoor的查询是最精确和最优的一,不要混淆! –

0

请记住,列在选择的数量是固定的。也许我错过了理解,但是你想输入一个城市列表,并且输出包含你输入的列的数量?

如果没有(固定铌城市): 建议:加入的条件与查询(说实话,因为使用通配符没有真正PERF的提高,你应该想想,否则增加一个“城市”栏目,如果表变得太大,这个查询就会变得很慢)

SELECT 
SUM(CASE WHEN STREET_ADDRESS LIKE '%MANGERE%' THEN 1 ELSE 0 END) AS MANGERE_COUNT, 
SUM(CASE WHEN STREET_ADDRESS LIKE '%AVONDALE%' THEN 1 ELSE 0 END) AS AVONDALE_COUNT 
FROM CUSTOMERS 
WHERE 
STREET_ADDRESS like '%MANGERE%' 
OR 
STREET_ADDRESS like '%AVONDALE%' 

如果是这样的话:
您需要创建动态SQL转输出。

希望它可以帮助 塞尔吉奥

0

有,你使用case表达式返回每个STREET_ADDRESS城市名称派生表。然后做GROUP BY其结果数:

select count(*), city 
from 
(
    select case when upper(STREET_ADDRESS) like '%MELBOURNE%' then 'Melbourne' 
       when upper(STREET_ADDRESS) like '%SYDNEY%' then 'Sydney' 
       when upper(STREET_ADDRESS) like '%AUCKLAND%' then 'Auckland' 
      end as city 
    from CUSTOMERS 
) dt 
group by city 

注意:如果使用不区分大小写的排序规则不需要UPPER()部分。

相关问题