使用分组在一起的不同Select语句的SQL问题
我很难回答我提出的这个问题。我有一张桌子 使用列名为oEID、FkEquipmentType、Nominal、Low调用KpiSetupOee 我有一个select语句,它给出了FkEquipmentType等于“WM”的标称值使用分组在一起的不同Select语句的SQL问题,sql,sql-server,Sql,Sql Server,我很难回答我提出的这个问题。我有一张桌子 使用列名为oEID、FkEquipmentType、Nominal、Low调用KpiSetupOee 我有一个select语句,它给出了FkEquipmentType等于“WM”的标称值 Select * from KpiSetupOee where FkEquipmentType =’WM’ 然后,我想结合另一个select语句来检索除“WM”以外的最低标称值 当我分别运行此命令时,我得到了两个select语句的正确答案。当我在中间做一个联合时,我得
Select * from KpiSetupOee where FkEquipmentType =’WM’
然后,我想结合另一个select语句来检索除“WM”以外的最低标称值
当我分别运行此命令时,我得到了两个select语句的正确答案。当我在中间做一个联合时,我得到第一个答案的正确答案,但第二个答案是错误的。第二个选择不是给我最低的标称值。有人知道我做错了什么吗?是否有一个更简单的查询来获取这些值?先执行哪个select语句并不重要。我只需要标称值,当设备类型为“WM”时为低,当设备类型不等于WM时,其余设备的最小标称值为低。有什么建议吗?谢谢你的帮助
Select * from KpiSetupOee where FkEquipmentType =’WM’
Union all
Select top 1 * from KpiSetupOee where FlEquipmentType <>’WM’ Order by Nominal asc
相反,通过将select包装到中来尝试下面的查询 对于MySQL,语法如下所示。看到这把小提琴了吗 对于SQL Server,语法如下所示。请看这里的演示
您可以通过以下查询执行此操作:
SELECT TOP 2 * FROM (Select 1 as 'RowNum', OeeID, FkEquipmentType, Nominal, Low from #KpiSetupOee where FkEquipmentType ='WM'
Union
Select 2, OeeID, FkEquipmentType, Nominal, Low from #KpiSetupOee where FkEquipmentType <> 'WM') A Order by 'RowNum', Nominal asc
此方法的好处是,它将始终确保FkEquipmentType为“WM”的行始终是返回查询中的第一行
看到这里了吗
希望这有帮助 将第二个选择放在括号内:选择。这个查询不会在SQLServer或MySQL中编译。你能做一把小提琴来证明这是有效的吗?我试过了,但没能成功。下面的答案很好。@Satwikandkarny,给出的语法是针对MySQL的,因为问题是用MySQL标记的,它确实是在MySQL中工作得很好的corect synatx;唯一的希克是我没有注意到排名前1的球员,他们应该被限制在第1位。无论如何,当前的编辑将更有意义。@ENGR024,您的问题已被MySQL和SQL Server标记。所以我给出的答案是关于MySQL语法的。现在有一个小错误。介意再试一次吗。。。请参阅编辑后的答案。Rahul,我错误地认为MySQL和SQL Server的语法相同。很抱歉给大家带来困惑。是的,这很有效,谢谢。我问问题会丢分吗?@ENGR024肯定有人对你的问题投了否决票。当有人否决你的问题时,你会失去声誉;当有人否决你的问题时,你会赢得声誉@ENGR024很高兴帮助您!!!
(Select * from tab1 where FkEquipmentType = 'WM')
Union all
(Select * from tab1 where FkEquipmentType <> 'WM'
Order by Nominal asc limit 1);
Select oeeid, FkEquipmentType,nominal,low
from tab1 where FkEquipmentType ='WM'
Union all
select oeeid, FkEquipmentType,nominal,low
from
(
Select *,ROW_NUMBER() OVER (ORDER BY nominal) as rn from tab1
where FkEquipmentType <> 'WM'
) X where rn = 1;
SELECT TOP 2 * FROM (Select 1 as 'RowNum', OeeID, FkEquipmentType, Nominal, Low from #KpiSetupOee where FkEquipmentType ='WM'
Union
Select 2, OeeID, FkEquipmentType, Nominal, Low from #KpiSetupOee where FkEquipmentType <> 'WM') A Order by 'RowNum', Nominal asc