选择与With Statement不同

时间:2018-03-09 10:23:53

标签: sql sql-server distinct common-table-expression

如何从以下查询中选择不同的[案例所有者],[案例编号]?

result_array()

上面的查询返回:

Duplicated [Case number]

我希望输出结果如下所示,没有[Case Number]的重复值:

Required Output

2 个答案:

答案 0 :(得分:0)

我认为您可能需要GROUP BY,如下所示:

WITH RandomCaseNum AS
        (
                SELECT   [Date/Time Closed]
                        ,[Case Owner] 
                        ,[Case Number]
                        ,ROW_NUMBER() Over (Partition By [Case Owner] Order By NewId()) Random
                FROM    [RE_INT_IE_SalesForceGoogle].[dbo].[tb_CCAScrubbedAll]
                        LEFT OUTER JOIN [RE_INT_IE_Darwin].[dbo].[datPREP_02_EmployeeList] E
                        ON [Case Owner] = E.GoogleSalesforceName
                WHERE   YEAR([Date/Time Closed]) = YEAR(GETDATE())
                        AND DATEPART(WW, [Date/Time Closed]) = DATEPART(WW, GETDATE()) -1
        )
SELECT   [Case Owner]
        ,[Case Number]
        ,SUM (Random)
FROM    RandomCaseNum
GROUP BY   [Case Owner]
          ,[Case Number]
HAVING Random SUM (Random) <= 5

答案 1 :(得分:0)

你想要在CTE内部进行GROUP BY,而不是在它之外。在外面,您需要为随机数添加一些无意义的聚合函数。

CTE中的[日期/时间已结束]可能是行复制的来源。这是否是罪魁祸首,因为你没有在你的外部查询中使用它,你在结果集中不需要它。

WITH RandomCaseNum AS
            (
                    SELECT   [Case Owner] 
                            ,[Case Number]
                            ,ROW_NUMBER() Over (Partition By [Case Owner] Order By NewId()) Random
                    FROM    [SF].[dbo].[All]
                    WHERE   YEAR([Date/Time Closed]) = YEAR(GETDATE())
                            AND DATEPART(WW, [Date/Time Closed]) = DATEPART(WW, GETDATE()) -1
                    GROUP BY [Case Owner] 
                            ,[Case Number]
            )
    SELECT   [Case Owner]
            ,[Case Number]
            ,Random
    FROM    RandomCaseNum
    WHERE   Random <= 5