SQL-如何从查询结果中排除与另一行相同的行?

SQL-如何从查询结果中排除与另一行相同的行?,sql,sql-server,Sql,Sql Server,我正在编写一个SQL查询,用于处理产品订单(眼镜镜片) 在数据库中,一个订单可以有多行。每行代表订单中的不同项目。所以一行是右镜头,另一行是aright.optionA,right.optionB等,左镜头也是一样 在我的查询中,一行是一个镜头,以及与之配套的所有选项 我的问题是有几个订单有错误。错误是其中一个选项已输入两次,但不可能有两个该类型的选项 < >我的查询已经被写入只考虑每一个镜像中的一个特定选项(所以每行),因此它会在这个错误发生时生成一个附加行(连同附加的数量、销售等)。 我不想

我正在编写一个SQL查询,用于处理产品订单(眼镜镜片)

在数据库中,一个订单可以有多行。每行代表订单中的不同项目。所以一行是右镜头,另一行是a
right.optionA
right.optionB
等,左镜头也是一样

在我的查询中,一行是一个镜头,以及与之配套的所有选项

我的问题是有几个订单有错误。错误是其中一个选项已输入两次,但不可能有两个该类型的选项

< >我的查询已经被写入只考虑每一个镜像中的一个特定选项(所以每行),因此它会在这个错误发生时生成一个附加行(连同附加的数量、销售等)。 我不想改变我的查询以考虑该类型的多个选项,因为它不应该发生,所以我不能对这些行的数据进行
求和
,也不能按分组

我的问题是,如何在SQL中说,我只想考虑第一行?

现在我的想法是对该选项类型的行进行计数(*),当它大于1时,它应该做些什么,但我不知道是什么

下面是一个带有错误的订单的屏幕截图。
CompType
列表示项目的类型。
CompType
03
是错误所在。我们可以看到有两行,这就是问题所在:

我试着尽量简短,我知道这有点长,对此我很抱歉


谢谢,祝你今天愉快。

这取决于哪个“位置”是正确的。它必须返回多行,因为有多个值,但正如您所说的,它们是错误的。我要做的是假设,如果每个“comptype”都有多个“positions”(这似乎是问题所在),那么为了去掉其中一个值,只需选择positions列的min或max,并仅按其他类别分组。希望这有帮助。

由于
位置列的原因,行不相同。最简单的修复方法是
MIN(位置)
MAX(位置)
然后
按其他列分组

带有
MIN()
的示例:


我认为这里要强调的最重要的事情是清理系统中的数据。但也就是说,假设您总是希望按位置显示第一个重复行,并且问题行始终与好行完全相同,那么这就应该做到:

SELECT OrdNumb, Side, MIN(Position) AS Position, Comptype, RecType, Compcode, FrameNo, ItemCode, CompDescr, Quantity
FROM OrderLine
GROUP BY OrdNumb, Side, Comptype, RecType, Compcode, FrameNo, ItemCode, CompDescr, Quantity

由于
位置
列的原因,行不相同。最简单的解决方法是
MIN(位置)
MAX(位置)
然后
按其他列分组。@AaronDietz我会把这个作为答案添加进来…@aaron Dietz非常感谢!我会读一下最小值和最大值,然后给它一个快照谢谢。是的,我知道这很理想,但我没有这个数据库。谢谢你的建议,我会尽快尝试的。
SELECT OrdNumb, Side, MIN(Position) AS Position, Comptype, RecType, Compcode, FrameNo, ItemCode, CompDescr, Quantity
FROM OrderLine
GROUP BY OrdNumb, Side, Comptype, RecType, Compcode, FrameNo, ItemCode, CompDescr, Quantity