如果响应日期相同,则每个预订ID显示1个结果

时间:2018-08-13 15:10:23

标签: sql sql-server

以下是我的桌子的一部分。

Response Date               Booking ID   Supplier  CSAT    Customer Effort
2017-02-18 14:00:00.000     76579481     NULL      77.00    2.00      
2017-02-18 14:00:00.000     76579481     NULL      77.00    2.00         
2017-02-18 14:00:00.000     76579481     NULL      77.00    2.00    
2017-02-18 14:00:00.000     76579481     NULL      77.00    2.00    

如您所见,以上数据(客户调查结果记录)是重复的,因为每次客户与我们联系时都会创建一行。如果响应日期相同,我只想在每个预订ID中显示1行,因为这些记录是重复的,但是具有不同响应日期的记录是有效的,因为客户可以多次填写调查结果,但不能在同一日期执行。以下是我的查询。

SELECT
        cx.review_date                            AS [Response Date],
        cx.fk_reservation                         AS [Booking ID],
        ca.company_name                           AS [Supplier],
        CAST(AVG(cx.csat_score) AS DECIMAL(5, 2)) AS [CSAT],
        CAST(AVG(cx.ces_score) AS DECIMAL(5, 2))  AS [Customer Effort],
        nps_score,
        CC.comments                               AS [Customer Feedback],
        rr.Country_ID                             AS [Pickup Country],
        rr.citizen_country_code                   AS Residency,
        cx.location_name                          AS [Pick-up Location],
        contractInfo.businessType                 AS [Business],
        G.LABEL_YYYY_MM_DD                        AS [Contact Date],
        G.BUSINESS_RESULT                         AS [Contact Reason],
        G.MEDIA_NAME                              AS [Contact Type],
        cl.Client_Name                            AS [Partner],
        cx.staff_id
FROM
        [Koios].[dbo].CCE_CXReview_Data               cx WITH (READUNCOMMITTED)
    LEFT JOIN
        reservation_reporting                         AS rr WITH (READUNCOMMITTED)
            ON rr.Ref = cx.fk_reservation
    LEFT JOIN
        Car_Agents                                    AS ca WITH (READUNCOMMITTED)
            ON ca.car_agent_id = cx.car_agent_id
    LEFT JOIN
        Client                                        cl WITH (READUNCOMMITTED)
            ON cx.parent_id = cl.parent_id
    LEFT JOIN
        reservation_contract_info                     contractInfo WITH (READUNCOMMITTED)
            ON contractInfo.fk_reservation = rr.ref
    LEFT JOIN
        CX_Customer_Comments                          CC WITH (READUNCOMMITTED)
            ON CC.fk_reservation = cx.fk_reservation
    LEFT JOIN
        [Genesys].[dbo].[VA_Genesys]                  G WITH (READUNCOMMITTED)
            ON G.CASE_ID = rr.Reservation_ID
    LEFT JOIN
        [Genesys].[dbo].EXP_INTERACTION_RESOURCE_FACT I WITH (READUNCOMMITTED)
            ON I.INTERACTION_RESOURCE_ID = G.INTERACTION_RESOURCE_ID
    LEFT JOIN
        [Genesys].[dbo].EXP_DATE_TIME                 D WITH (READUNCOMMITTED)
            ON I.START_DATE_TIME_KEY = D.DATE_TIME_KEY
WHERE
        rr.reservation_status <> '4'
        AND rr.Dropoff_date
        BETWEEN '2018-01-01' AND '2018-07-31'
GROUP BY
        cx.review_date,
        ca.company_name,
        cx.fk_reservation,
        rr.Country_ID,
        rr.citizen_country_code,
        cx.location_name,
        CC.comments,
        contractInfo.businessType,
        G.LABEL_YYYY_MM_DD,
        G.BUSINESS_RESULT,
        G.MEDIA_NAME,
        cl.Client_Name,
        nps_score,
        cx.staff_id;

到目前为止,我还没有运气。我将不胜感激任何帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

我看到的问题是您在GroupBy中放置了太多列

尝试这样的事情

SELECT
    cx.review_date                            AS [Response Date],
    cx.fk_reservation                         AS [Booking ID],
    MAX(ca.company_name)                           AS [Supplier],
    CAST(AVG(cx.csat_score) AS DECIMAL(5, 2)) AS [CSAT],
    CAST(AVG(cx.ces_score) AS DECIMAL(5, 2))  AS [Customer Effort],
    MAX(nps_score),
    MAX(CC.comments)                               AS [Customer Feedback],
    MAX(rr.Country_ID)                             AS [Pickup Country],
    MAX(rr.citizen_country_code)                   AS Residency,
    MAX(cx.location_name)                          AS [Pick-up Location],
    MAX(contractInfo.businessType)                 AS [Business],
    MAX(G.LABEL_YYYY_MM_DD)                        AS [Contact Date],
    MAX(G.BUSINESS_RESULT)                         AS [Contact Reason],
    MAX(G.MEDIA_NAME)                              AS [Contact Type],
    MAX(cl.Client_Name)                            AS [Partner],
    MAX(cx.staff_id)
FROM
        [Koios].[dbo].CCE_CXReview_Data               cx WITH (READUNCOMMITTED)
    LEFT JOIN
        reservation_reporting                         AS rr WITH (READUNCOMMITTED)
            ON rr.Ref = cx.fk_reservation
    LEFT JOIN
        Car_Agents                                    AS ca WITH (READUNCOMMITTED)
            ON ca.car_agent_id = cx.car_agent_id
    LEFT JOIN
        Client                                        cl WITH (READUNCOMMITTED)
            ON cx.parent_id = cl.parent_id
    LEFT JOIN
        reservation_contract_info                     contractInfo WITH (READUNCOMMITTED)
            ON contractInfo.fk_reservation = rr.ref
    LEFT JOIN
        CX_Customer_Comments                          CC WITH (READUNCOMMITTED)
            ON CC.fk_reservation = cx.fk_reservation
    LEFT JOIN
        [Genesys].[dbo].[VA_Genesys]                  G WITH (READUNCOMMITTED)
            ON G.CASE_ID = rr.Reservation_ID
    LEFT JOIN
        [Genesys].[dbo].EXP_INTERACTION_RESOURCE_FACT I WITH (READUNCOMMITTED)
            ON I.INTERACTION_RESOURCE_ID = G.INTERACTION_RESOURCE_ID
    LEFT JOIN
        [Genesys].[dbo].EXP_DATE_TIME                 D WITH (READUNCOMMITTED)
            ON I.START_DATE_TIME_KEY = D.DATE_TIME_KEY
WHERE
        rr.reservation_status <> '4'
        AND rr.Dropoff_date
        BETWEEN '2018-01-01' AND '2018-07-31'
GROUP BY
        cx.review_date,
        cx.fk_reservation;