【发布时间】:2012-09-24 18:20:38
【问题描述】:
我是 Oracle 数据库查询开发的初学者。我正在为我的项目开发一个搜索功能,以按 Zip 或 Name 或 City 搜索商店,其中将向用户提供“一个HTML 输入框”来输入搜索词。只有一个名为 Stores 的表
显示搜索结果的条件是
- 如果与
ZIP匹配的搜索词结果应该是GROUP和SORT BY ZIP DESC - 如果搜索词匹配到
NAME结果应该是分组和排序NAME IN ASC和CITY一样 - 如果搜索词匹配
ZIP,NAME和CITY(全部),那么首先匹配ZIP的结果应该显示在DESC order中,接下来是CITY,然后是TheNAME
我尝试过类似的东西
SELECT s.uuid AS uuid, COUNT(*) over() AS rowcount
FROM Stores s
WHERE s.postalcode LIKE '%87%'
OR s.city LIKE '%87%'
OR CONCAT(CONCAT(s.firstname, ' '),s.lastname) LIKE '%87%'
GROUP BY s.city, s.postalcode,
CONCAT(CONCAT(s.firstname, ' '),s.lastname), s.uuid
ORDER BY CASE WHEN s.postalcode LIKE '%87%'
THEN s.postalcode END DESC,
CASE WHEN CONCAT(CONCAT(s.firstname, ' '),s.lastname) LIKE '%87%'
THEN CONCAT(CONCAT(s.firstname, ' '),s.lastname)
ELSE s.postalcode END ASC,
CASE WHEN s.city LIKE '%87%'
THEN s.city END
此查询未按预期显示结果(我的意思是它显示的结果没有顺序,而不是像第一个 zip,下一个城市后跟名称)。
如何进行查询以满足上述要求,是否需要使用存储过程来做到这一点?任何建议将不胜感激。
【问题讨论】:
-
这听起来像是家庭作业,如果是,请标记它。与今天早些时候提出的这个问题也很相似:stackoverflow.com/questions/12564918/…
-
您是否尝试过将
ORDER BY子句中的CASE结构放入SELECT和GROUP BY子句中?试着把它完全像那样,我们可能会看到结果。