【发布时间】:2018-02-23 16:16:03
【问题描述】:
我正在尝试比较两个字符串并选择最长的字符串(如果它们相似),我已经通过使用以下代码设法选择了最长的字符串:
SELECT D.RID, ProductID, Product, [Length] FROM (
SELECT RID, MAX([Length]) AS theLength FROM SortData GROUP BY RID)
AS X INNER JOIN SortData AS D ON D.RID = X.RID AND D.[Length] = X.theLength
但是我现在正在尝试确保代码只选择最长的字符串,如果它与它比较的单词相似,我已经尝试了以下代码,但如果有人可以的话,我将不胜感激帮帮我:
SELECT D.RID, D.ProductID, Product, [Length] FROM (
SELECT RID, Product, MAX([Length]) AS theLength FROM SortData GROUP BY RID)
AS X INNER JOIN SortData AS D ON D.RID = X.RID AND D.[Length] = X.theLength WHERE
D.Product LIKE Product
使用此代码我得到以下错误:
消息 8120,级别 16,状态 1,第 3 行列“SortData.Product”为 在选择列表中无效,因为它不包含在 聚合函数或 GROUP BY 子句。消息 209,级别 16,状态 1, 第 5 行不明确的列名称“产品”。消息 209,级别 16,状态 1, 第 2 行不明确的列名称“产品”。
我想选择的数据示例:
1 山姆
1 萨曼莎
2 奥利弗
3 奥利
4 本杰明
4 本
...
我希望输出列表如下:
1 萨曼莎
2 奥利弗
3 奥利
4 本杰明
...
为了澄清我在此示例的上下文中尝试执行的操作,我尝试比较两个名称,如果它们是 LIKE(例如 x.Name LIKE 名称),则选择最长的...
这里要求的是进一步的测试数据:
1 氢
1 氧化氢
1 一氧化碳
2 碳
2 碳
2 二氧化碳
3 一氧化碳
3 二氧化碳
3 氧气
4 二氧化氢
期望的结果如下:
1 氧化氢
1 一氧化碳
2 二氧化碳
3 一氧化碳
3 氧气
4 二氧化氢
【问题讨论】:
-
使用新的示例数据,John 和我自己的代码仍然返回所需的输出。
-
它没有...当我给代码提供 ID 为 1 到 6 的 Sam、Ben、Benjamin、Ollie、Oliver 和 Samantha 的列表时,我仍然得到完全相同的列表吗?要添加,如果 id 相同,它将只取最大的,在您提供的任何代码中,没有比较 LIKE 让我同时获得 Samantha 和 Benjamin,这意味着 Ollie 和 Oliver 应该是 LIKE Sam、Ben、Benjamin、Ollie , Oliver 和 Samantha,如果你的代码中有类似的东西?
-
在下面查看我的编辑。新的示例数据实际上与原始数据没有什么不同,并且发布的代码仍然返回您所说的所需输出。帮助我们了解问题。
标签: sql-server sql-like