【发布时间】:2013-12-29 19:57:24
【问题描述】:
假设我有以下数据,最后一列关键字不过是其他 4 列的组合。
╔════╦══════╦════════════╦═════════╦════════════╦════════════════════════════════╗
║ ID ║ Name ║ Add1 ║ Add2 ║ Add3 ║ Keyword ║
╠════╬══════╬════════════╬═════════╬════════════╬════════════════════════════════╣
║ 1 ║ John ║ W Brown St ║ Edison ║ Washington ║ JohnW Brown StEdisonWashington ║
║ 2 ║ Paul ║ E High Rd ║ Peapack ║ New Jersey ║ PaulE High RdPeapackNew Jersey ║
║ 3 ║ John ║ Greams Rd ║ Peapack ║ Washington ║ JohnGreams RdPeapackWashington ║
╚════╩══════╩════════════╩═════════╩════════════╩════════════════════════════════╝
现在用户可以输入任何文本字段 Name、Add1、Add2、Add3 并单击搜索,它应该搜索所有字段。
为此,我正在尝试,
SELECT *, COUNT(ID) AS FREQUENCY FROM TABA WHERE ID IN
(
(SELECT ID FROM TABA WHERE KEYWORD LIKE '%WASHINGTON%')
UNION ALL
(SELECT ID FROM TABA WHERE KEYWORD LIKE '%JOHN%')
UNION ALL
(SELECT ID FROM TABA WHERE KEYWORD LIKE '%PEAPACK%')
)
GROUP BY ID
ORDER BY FREQUENCY
预期输出:
╔════╦══════╦════════════╦═════════╦════════════╦═══════════╗
║ ID ║ Name ║ Add1 ║ Add2 ║ Add3 ║ Frequency ║
╠════╬══════╬════════════╬═════════╬════════════╬═══════════╣
║ 3 ║ John ║ Greams Rd ║ Peapack ║ Washington ║ 3 ║
║ 1 ║ John ║ W Brown St ║ Edison ║ Washington ║ 2 ║
║ 2 ║ Paul ║ E High Rd ║ Peapack ║ New Jersey ║ 1 ║
╚════╩══════╩════════════╩═════════╩════════════╩═══════════╝
但我得到的所有频率值都是 1。我做错了什么?
【问题讨论】:
-
+1 用于酷炫的 ASCII 艺术表
-
那是因为你的内部查询丢失了计数,只选择了
IDs。
标签: sql sql-server