2017-04-04 32 views
0

如何编写我的查询以检索数据显示如果客户在同一注册地点提供服务,则每人每天提供一项服务在当天的不同登记地点提供,应显示服务。如果客户在同一地点提供服务,则每人每天一项服务

PS:el =登记位置,sl =服务位置,服务日期是datetime2,因此出现不同时间。

实例的原始数据

ClientID serviceID clientname  sl   el   service date 
    1   112   sam   atlanta  atlanta  04/01/2017 
    1   113   sam   atlanta  atlanta  04/01/2017 
    1   114   sam   augusta  atlanta  04/01/2017 
    1   115   sam   atlanta montgomery  04/01/2017 
    1   116   sam   atlanta atlanta  04/02/2017 
    2   117   joy   delaware delaware  04/02/2017 
    2   118   joy   delaware delaware  04/02/2017 

Expected result for service dates between 04/01/2017 and 04/03/2017 

ClientID serviceID clientname  sl   el   service date 
    1   112   sam   atlanta  atlanta  04/01/2017 
    1   114   sam   augusta  atlanta  04/01/2017 
    1   115   sam   atlanta montgomery  04/01/2017 
    1   116   sam   atlanta atlanta  04/02/2017 
    2   118   joy   delaware delaware  04/02/2017
+0

只是做SELECT DISTINCT客户端ID,服务ID,Cluentname,SL,EL FROM YourTablr –

+0

对不起错别字,我的手机上面键入。也应该包含在上面的服务数据列 –

回答

0

一种选择这里是使用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] 
+0

非常感谢蒂姆,但它并没有伎俩,你看到它的一个长脚本,我将用于SSRS和所有这些列分组,,,,,你有另一种方法我可以试试。感谢你所做的一切。 –

+0

@HenryAmadi另一种方法是使用'ROW_NUMBER()',但即使在这种情况下,我们也需要列出分区的相同列。你应该给出一个更好的例子来更真实地反映你的实际问题。 –