【问题标题】:How to make query which display only one record among the multiple similar records? [Microsoft SQL]如何查询在多条相似记录中只显示一条记录? [微软 SQL]
【发布时间】:2017-03-20 16:15:48
【问题描述】:

我遇到了一个查询问题,我需要在 C# 的数据网格中显示数据。 我有桌子篮子,在一个特定的篮子里我可以保存许多工单(不受限制)

所以现在我已经完成了查询,它让我获得了 datagrid 中的所有工作订单,所以我复制了 datagarid 中显示的购物篮,我需要显示每个购物篮,但最后输入的工作订单。 我想做一个查询,每个篮子只显示一个工作订单(只显示最新或最后输入的工作订单)。

我们尝试了 group by 和 distinct,但没有成功。

我试过这些

select db_basket.basket_id, db_basket_order.basket_order_id, db_basket.basket_mark, prod_workorder.brojnaloga, db_basket_order.startdate, db_basket_order.quantity
from db_basket
left join db_basket_order
on db_basket_order.basket_id=db_basket.basket_id
left join prod_workorder
on db_basket_order.workorder_id=prod_workorder.workorderid

select db_basket.basket_mark, max(db_basket_order.startdate) as startdate
from db_basket
left join db_basket_order
on db_basket_order.basket_id=db_basket.basket_id
group by basket_mark

Query results

这里我有一张图片,在图片上你可以看到查询显示了几行具有相同的 basket_id,正如我所说,我只需要一个篮子来显示我最新的工作订单。

谢谢。

【问题讨论】:

  • 如果您将basket_id 设为唯一,则@Ali 代码的以下答案将起作用。查询显示多行具有相同basket_id 的原因是因为它们都具有相同的编号。除非您使用 basket_order_id 或使 basket_id 代码唯一,否则它将始终显示所述行。

标签: c# sql-server datagrid


【解决方案1】:

你可以试试这样的

select db_basket.basket_id, db_basket_order.basket_order_id, db_basket.basket_mark, prod_workorder.brojnaloga, db_basket_order.startdate, db_basket_order.quantity
from db_basket
left join db_basket_order
on db_basket_order.basket_id=db_basket.basket_id
left join prod_workorder
on db_basket_order.workorder_id=prod_workorder.workorderid
group by db_basket.basket_id //<--unique ids
order by db_basket_order.basket_order_id desc //<--with highest order

【讨论】:

  • 根据 OP 的照片,db_basket.basket_id 并不是唯一的,因为我看到的是 3 db_basket.basket_id = 25
猜你喜欢
  • 1970-01-01
  • 2016-07-11
  • 2023-03-28
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
相关资源
最近更新 更多