当前位置: 首页 > 面试题库 >

如何从查询中获得结果,在这些查询中,第一列在更改之前不会重复其值

万俟渊
2023-03-14
问题内容

我有一个仅返回几行的查询,但是我需要对结果进行分组,以使前两列直到其值更改后才重复。

让我告诉你我的意思,那会更容易。
这是查询:

select isnull(d.FirstName, '') + ' ' + isnull(d.LastName, '') as Chauffeur,
       t.securysatnr,
       convert(date, p.PlanningDate) as Datum,
       p.StartTime as LaadUur,
       r.LotNr,
       isnull(pFrom.City, '') + ' - ' + isnull(pTo.City, '') as RitInfo 
from   tblPlanning p
  left outer join vwRit r on p.RitID = r.RitID
  left outer join tblPlace pFrom on r.VertrekID = pFrom.PlaceID
  left outer join tblPlace pTo on r.BestemmingID = pTo.PlaceID
  inner join tblDriver d on p.DriverID = d.DriverID
  inner join tblTruck t on p.TruckID = t.TruckID
where  convert(date, p.PlanningDate) >= convert(date, getdate())
order by Chauffeur, convert(date, p.PlanningDate), p.StartTime

这是返回的结果集:

Chauffeur   securysatnr     Datum       LaadUur  LotNr    RitInfo   
---------   -----------     -----       -------  -----    -------   
Aloyzyas    JBB017          2017-07-12    13     RT-0181  Creutzwald (Tramosa) - Koln TS    
Aloyzyas    JBB017          2017-07-12    20     EMPTY    Koln TS - Neuss (ATN) 
Aloyzyas    JBB017          2017-07-13     6     2094935  Neuss (ATN) - Zulpich WWL 
Andrii      HT5485 FB-CA    2017-07-12    14     EMPTY    Zulpich WWL - Born (Nedcar)   
Andrii      HT5485 FB-CA    2017-07-12    16     1709426  Born (Nedcar) - Zeebrugge Hanze terminal 521-525  
Andrii      HT5485 FB-CA    2017-07-13     8     0006620  Zeebrugge ICO gate 502 - Niederkorn (Coll茅)   
Darius      HPV472          2017-07-12    17     0006624  Zeebrugge ICO gate 502 - Antwerpen 1333   
and so on...

这就是我想要得到的结果:

Chauffeur   securysatnr    Datum      LaadUur   LotNr     RitInfo   
---------   -----------    -----      -------   -----     -------   
Aloyzyas    JBB017          2017-07-12    13    RT-0181   Creutzwald (Tramosa) - Koln TS    
                            2017-07-12    20    EMPTY     Koln TS - Neuss (ATN) 
                            2017-07-13     6    2094935   Neuss (ATN) - Zulpich WWL 
Andrii      HT5485 FB-CA    2017-07-12    14    EMPTY     Zulpich WWL - Born (Nedcar)   
                            2017-07-12    16    1709426   Born (Nedcar) - Zeebrugge Hanze terminal 521-525  
                            2017-07-13     8    0006620   Zeebrugge ICO gate 502 - Niederkorn (Coll茅)   
Darius      HPV472          2017-07-12    17    0006624   Zeebrugge ICO gate 502 - Antwerpen 1333   
and so on...

我希望这可以清楚说明我想要的结果。
在sql-server中这可能吗?如果是的话,那么我该如何在脱口而出。

编辑:
一种选择是在存储过程中执行此操作,然后遍历记录并填充并返回临时表。但是我希望没有存储过程的解决方案

编辑:
我知道这通常应该在表示层中完成,但是在这种情况下很难。它是一种接收要从另一个表执行的查询的形式,因此它不知道将接收什么结果集。因此,在这种情况下将不可能在表示层上执行此操作,除非有人知道在这种情况下我该如何执行此操作。


问题答案:

这是表示/格式问题,而不是数据检索问题。

但是,如果您确实遇到这个问题,可以这样做…

注意: 未经 测试,您可能需要使用LEAD而不是LAG

SELECT
    Chauffeur = CASE WHEN  X.prevsecurysatnr =  X.securysatnr THEN '' ELSE   X.Chauffeur END,
    securysatnr = CASE WHEN  X.prevsecurysatnr =  X.securysatnr THEN '' ELSE   X.securysatnr END,
     X.Datum,
     X.LaadUur,
     X.LotNr,
     X.RitInfo
FROM
    (
    SELECT
            LAG(t.securysatnr) OVER (ORDER BY ISNULL(d.FirstName, '') + ' ' + isnull(d.LastName, ''), convert(date, p.PlanningDate), p.StartTime) AS prevsecurysatnr,
            ISNULL(d.FirstName, '') + ' ' + isnull(d.LastName, '') as Chauffeur,
            t.securysatnr,
            convert(date, p.PlanningDate) as Datum,
            p.StartTime as LaadUur,
            r.LotNr,
            isnull(pFrom.City, '') + ' - ' + isnull(pTo.City, '') as RitInfo 
    from   
        tblPlanning p
        left outer join vwRit r on p.RitID = r.RitID
        left outer join tblPlace pFrom on r.VertrekID = pFrom.PlaceID
        left outer join tblPlace pTo on r.BestemmingID = pTo.PlaceID
        inner join tblDriver d on p.DriverID = d.DriverID
        inner join tblTruck t on p.TruckID = t.TruckID
    where  convert(date, p.PlanningDate) = convert(date, getdate())
    ) X
order by 
    X.Chauffeur,  X.Datum,  X.LaadUur


 类似资料:
  • 这家餐厅是猫鼬的典范。我试图在适当的地方改变事情,但没有成功: 我认为是一个模型对象。我试图看到检查属性描述符与以下内容,它说: 为什么删除对象不起作用?为什么我看不到属性描述符? 编辑:所以这是一个猫鼬文件。但是,用Javascript术语来说,像Mongoose文档这样的对象可以基于Javascript对象以外的其他对象吗?一些基于内部C代码的包装器还是什么?

  • 假设我有一条这样的路线 我想在第二个查询中使用一些数据,这些数据将由第一个查询返回。但是现在我不能这样做,因为根据我的理解(如果我错了,请纠正我),这两个查询都是promise的,并且是异步工作的,所以它不会等待第一个查询的完成来执行第二个查询。 我将如何重写这一点,使第一个查询的执行总是在执行第二个查询之前首先完成?

  • 我试图为我的PHP站点提供一个搜索功能。用户应该能够搜索他们想要的查询的行和列,如“搜索引擎”。我尝试了以下php代码: 一切正常,但我得到了重复的结果。我读了很多答案,到目前为止我做了以下工作:我使用了和但没有返回任何结果。我尝试分组,但他们没有删除重复的,什么也没有返回。我还在where条件中对应用了PHP array_unique(),但它也没有返回任何结果。如果我可以做到这一点,只使用SQ

  • 我在用猫鼬。我正在执行查找查询,但无法修改查询结果。

  • 我找不到在laravel mysql中显示集合随机结果的方法。我的问题是: 奇怪的是,我相信使用兰德可以完成这项工作,但我的结果显示使用与否(兰德)值相同。 谢谢你的帮助。

  • 我正在创建一个strutsHibernate应用程序。我使用hibernate查询获得了一个列表,并将其传递到action类中。但我不知道如何在JSP中显示它。 我已经在查询的基础上成功地得到了列表。现在我想用JSP显示这个列表。 我已经发布了<code>支柱。xml和用于显示结果的JSP。请检查。但在JSP中没有显示任何内容。我使用来显示列表。但没有运气。甚至我也尝试过在下打印简单文本,只是为了