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