【问题标题】:One service per day, per person if client is served at the same location如果客户在同一地点服务,则每人每天一次服务
【发布时间】:2017-08-29 04:31:53
【问题描述】:

我如何编写查询以检索显示每天每人一项服务的数据,如果客户在同一注册位置提供服务,而且如果同一客户在同一天在不同的注册位置提供服务,则应显示该服务。

PS:el = 注册地点,sl= 服务地点,服务日期为 datetime2,因此呈现不同的时间。

原始数据示例

ClientID serviceID clientname sl el 服务日期
  1 112 萨姆·亚特兰大 亚特兰大 04/01/2017
  1 113 萨姆·亚特兰大 亚特兰大 04/01/2017
  1 114 萨姆·奥古斯塔·亚特兰大 04/01/2017
  1 115 萨姆亚特兰大蒙哥马利 04/01/2017
  1 116 萨姆·亚特兰大 亚特兰大 04/02/2017
  2 117 喜悦特拉华特拉华州 04/02/2017
  2 118 喜悦特拉华州特拉华州 04/02/2017

2017 年 4 月 1 日至 2017 年 4 月 3 日之间服务日期的预期结果

ClientID serviceID clientname sl el 服务日期
  1 112 萨姆·亚特兰大 亚特兰大 04/01/2017
  1 114 萨姆·奥古斯塔·亚特兰大 04/01/2017
  1 115 萨姆亚特兰大蒙哥马利 04/01/2017
  1 116 萨姆·亚特兰大 亚特兰大 04/02/2017
  2 118 欢乐特拉华特拉华州 04/02/2017

【问题讨论】:

  • 只需从 YourTablr 中选择 DISTINCT ClientID、ServiceID、Cluentname、sl、el
  • 抱歉错别字,上面是我手机上输入的。上面也应该包含服务数据列

标签: sql sql-server sql-server-2008 reporting-services


【解决方案1】:

这里的一个选项是使用GROUP BY 来解决重复记录。如果我正确阅读了您的问题,则每个客户、服务地点、注册地点和给定日期应该只有一条记录。这意味着我们应该GROUP BY以下列:

ClientID, clientname, sl, el, [service date]

请注意,我还包括了clientname,以便它可以出现在结果集中。对于serviceID,我任意选择每组的最小值,这似乎与您的期望一致。

SELECT
    ClientID,
    MIN(serviceID) AS serviceID,
    clientname,
    sl,
    el,
    [service date]
FROM yourTable
GROUP BY
    ClientID,
    clientname,
    sl,
    el,
    [service date]

【讨论】:

  • 非常感谢蒂姆,但它并没有起到你所看到的长脚本的作用,我将用于 SSRS 并按所有这些列进行分组,,,,你有另一种方法我可以尝试吗?谢谢你所做的一切。
  • @HenryAmadi 另一种方法是使用ROW_NUMBER(),但即使在这种情况下,我们也需要为分区列出相同的列。你应该给出一个更好的例子,更能反映你的实际问题。
猜你喜欢
  • 2012-08-20
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多