【问题标题】:Query to get distinct results查询以获得不同的结果
【发布时间】:2020-03-25 05:02:50
【问题描述】:

我有一个查询要从多个表中获取数据。但不知何故,由于一列,我从数据库中得到了重复的条目。

查询是:

SELECT
  BH.BusinessName, AppointmentStartTime, AppointmentEndTime, AppointmentStatus,
  AppointmentFor, AppointmentForID, AppointmentStatus, S.ServiceName
from Appointment A
INNER JOIN BusinessHost BH ON A.BusinessHostID = BH.BusinessHostID
INNER JOIN BusinessHostService BHS ON BHS.BusinessHostID=BH.BusinessHostID
INNER JOIN Services S ON S.ServiceID=BHS.ServiceID

输出是这样的:

+ -------------+----------+------------ --------+-------------------+----------------+---- --------------+-------------------+---------------- ------+ |企业名称 |预约开始时间 |预约结束时间 |预约状态 |预约 | AppointmentForID |预约状态 |服务名称 | + -------------+----------+------------ --------+-------------------+----------------+---- --------------+-------------------+---------------- ------+ |阿米特父子 | 02:00:00.0000000 | 02:15:00.0000000 |已添加 |摩托车 | 1006 |已添加 |树木栽培 | |阿米特父子 | 02:00:00.0000000 | 02:15:00.0000000 |已添加 |摩托车 | 1006 |已添加 |园林绿化服务 | |罗希特父子 | 02:30:00.0000000 | 02:45:00.0000000 |已添加 |摩托车 | 1006 |已添加 |树木栽培 | |罗希特父子 | 02:30:00.0000000 | 02:45:00.0000000 |已添加 |摩托车 | 1006 |已添加 |园林绿化服务 | + -------------+----------+------------ --------+-------------------+----------------+---- --------------+-------------------+---------------- ------+

您能帮我编写查询以获得所需的结果,例如:

+ -------------+----------+------------ --------+-------------------+----------------+---- --------------+-------------------+---------------- ---------------------+ |企业名称 |预约开始时间 |预约结束时间 |预约状态 |预约 | AppointmentForID |预约状态 |服务名称 | + -------------+----------+------------ --------+-------------------+----------------+---- --------------+-------------------+---------------- ---------------------+ |阿米特父子 | 02:30:00.0000000 | 02:45:00.0000000 |已添加 |摩托车 | 1006 |已添加 |树木栽培、园林绿化服务 | |罗希特父子 | 02:30:00.0000000 | 02:45:00.0000000 |已添加 |摩托车 | 1006 |已添加 |树木栽培、园林绿化服务 | + -------------+----------+------------ --------+-------------------+----------------+---- --------------+-------------------+---------------- ---------------------+

【问题讨论】:

  • 您正在寻找具有字符串连接的聚合。这在其他具有聚合函数的 DBMS 中非常简单,例如 LISTAGGGROUP_CONCATSTRING_AGG。 SQL Server没有这样的功能,但是可以模拟,比较尴尬。只需谷歌string-aggregation sql-server :-)
  • 糟糕,更新:自 2017 版起,SQL Server 确实有 STRING_AGGdocs.microsoft.com/de-de/sql/t-sql/functions/…

标签: sql sql-server string-aggregation


【解决方案1】:

您正在寻找字符串聚合。从 SQL Server 2017 开始,这可通过 STRING_AGG (https://docs.microsoft.com/de-de/sql/t-sql/functions/string-agg-transact-sql?view=sql-server-ver15) 获得:

SELECT
  bh.businessname, a.appointmentstarttime, a.appointmentendtime, a.appointmentstatus,
  a.appointmentfor, a.appointmentforid, a.appointmentstatus, bs.servicenames
FROM appointment a
JOIN businesshost bh ON bh.businesshostid = a.businesshostid
JOIN
(
  SELECT
    bhs.businesshostid,
    STRING_AGG(s.servicename, ', ') WITHIN GROUP (ORDER BY s.servicename) AS servicenames
  FROM businesshostservice bhs
  JOIN services s ON s.serviceid = bhs.serviceid
  GROUP BY bhs.businesshostid
) bs ON bs.businesshostid = bh.businesshostid
ORDER BY bh.businessname, a.appointmentstarttime;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 2013-05-06
    • 2017-02-09
    • 2019-07-31
    相关资源
    最近更新 更多