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