2014-03-27 74 views
0

我在下面有一些T-SQL,并且我遇到了一个问题,其中每行使用相同的值返回两次。如何确保每个返回一次或强制SELECT DISTINCT在t-sql查询结果中删除重复的行

;WITH CTE_ReportDetails 
AS (
    SELECT 
     CASE(GROUPING(M.Acronym)) 
      WHEN 0 THEN [Acronym] 
      WHEN 1 THEN 'GRAND TOTAL' 
      END AS [Company], 

     CASE(GROUPING(DC.Name)) 
      WHEN 0 THEN DC.[Name] 
      WHEN 1 THEN 'N/A' 
      END AS [CatName], 

     CASE(GROUPING(D.[Name])) 
      WHEN 0 THEN D.[Name] 
      WHEN 1 THEN 'Total '+ '('+DC.[Name]+')' 
      END AS [Name], 

     SUM(ISNULL(B.One, 0)) AS One, 
     SUM(ISNULL(B.Two, 0)) AS Two, 
     SUM(ISNULL(B.Three, 0)) AS Three, 
     ISNULL(B.Description, '') AS Description, 
     GROUPING(M.Acronym) AS CompanyGrouping, 
     GROUPING(DC.[Name]) AS DCatGroup, 
     GROUPING(D.[Name]) AS DGroup 
    FROM Dee D 
     INNER JOIN DeeCategory DC ON D.DeeCategoryId = DC.DeeCategoryId 
     INNER JOIN BD B ON B.DeeId = D.DeeId 
     INNER JOIN Report R ON R.RptId = B.RptId 
     INNER JOIN Company M ON R.CompanyId = M.CompanyId     
    WHERE (R.ReportDate >= @StartDate AND R.ReportDate <= @EndDate) AND (R.CompanyId IN (SELECT DATA FROM SPLIT(@CompanyIds,','))) 
    GROUP BY M.Acronym, DC.Name, D.Name,B.Description 
    WITH ROLLUP 
) 
SELECT Company, Name As [Dee], 
     One, 
     Three, 
     Two, 
     (One + Three + Two) AS Total, 
     Description 
FROM CTE_ReportDetails 

回答

0

您的报告应该从group by有值的唯一组合。因此,这四列应该是唯一的:

GROUP BY M.Acronym, DC.Name, D.Name,B.Description 

如果我猜的话,你得到重复,因为B.DescriptionB表复制。我建议从GROUP BY删除它,改变这一行:

ISNULL(B.Description, '') AS Description, 

ISNULL(max(B.Description), '') AS Description,