Sql 选择除重复列以外的所有列,除非列的长度为';他的绳子最长

Sql 选择除重复列以外的所有列,除非列的长度为';他的绳子最长,sql,sql-server,performance,join,select,Sql,Sql Server,Performance,Join,Select,我有一个包含以下列的表: strWordType,strWordDescription 我希望能够选择所有的行,除了那些有重复strWordDescription的行。在重复的情况下,我只想返回strWord长度最长的行。仅当strWordType相同时,此选项才生效 注意:strWords/strWordType组合没有重复行,只有特定strWordType的重复strworddescription。我希望避免使用Distinct 示例:myTable 预期结果: strWord |

我有一个包含以下列的表:

strWordType,strWordDescription


我希望能够选择所有的行,除了那些有重复strWordDescription的行。在重复的情况下,我只想返回strWord长度最长的行。仅当strWordType相同时,此选项才生效

注意:strWords/strWordType组合没有重复行,只有特定strWordType的重复strworddescription。我希望避免使用
Distinct

示例:myTable

预期结果:

   strWord  |   strWordType   | strWordDescription

   green        2012            This is a color
   blue         2014            This is a color
   chicken      2014            This is a food

嗯。我想到了一个相关的子查询:

select t.*
from t
where t.strword = (select top (1) t2.strword
                   from t t2
                   where t2.description = t.description and
                         t2.strWordType = t.strWordType
                   order by len(t2.strword) desc
                  );
刚刚解决了-

SELECT MAX(mt.strWord),
       mt.strWordType,
       mt.strWordDescription


FROM myTable mt
GROUP BY mt.strWordType, mt.strWordDescription
ORDER BY MAX(mt.strWord)

到目前为止,您尝试了什么?显示示例数据和预期结果。。请随便帮忙yourself@maSTAShuFu添加了一个示例“在重复的情况下,我只想返回strWordType最长的行。这应该只在strWordType相同时生效。”在您的示例中,蓝色有一个不同的strWordType,但删除了一个。那加起来怎么样?谢谢你的回答。虽然,从性能上看,这一个大约慢了10倍,所以我将使用另一个。@CompSciFly。有趣。与
(description,strWordType,strword)
上的索引相比,性能如何?子查询会导致89%的成本此方法应该是
(description,strWordType,strword)
上索引的最快方法。我们无法在strword上索引,因为我们没有尝试包括所有这些。“描述”和“字型”上的索引之所以有效,是因为我们希望排除具有相同描述和“字型”的条目,但其中有一个较长的strWord。如果它解决了您的问题,您可以选择它作为接受的答案。@CompSciFly。我不知道
max()
与最长的单词有什么关系,所以我不知道这如何解决您的问题。如果您想按字母顺序排列最后一个单词,那么您应该问另一个问题。@GordonLinoff在SQL Server中使用max允许我们按strWordType和strWordDescription进行分组,并且仍然选择strWord。orderby是按strWord的长度排序的。这完全符合预期。@CompSciFly。这并不能回答你提出的问题。
SELECT MAX(mt.strWord),
       mt.strWordType,
       mt.strWordDescription


FROM myTable mt
GROUP BY mt.strWordType, mt.strWordDescription
ORDER BY MAX(mt.strWord)