如何修复“从字符串转换”8月“到类型'日期'在SSRS中没有变化

时间:2017-08-22 08:37:41

标签: sql sql-server

SELECT
    a.ItemCode, 
    SUM(a.NoOfApplication) AS NoOfApplication,
    SUM(a.NoOfAccomplished) AS NoOfAccomplished, 
    SUM(a.NoOfPending) AS NoOfPending,
    SUM(a.NoOfDocumentCompliance) AS NoOfDocumentCompliance, 
    a.[Year] 
FROM
    (SELECT
         ItemCode, 
         COUNT(am.ReferenceNumber) AS NoOfApplication,
         COUNT(TNA.NoOfAccomplished) AS NoOfAccomplished,
         COUNT(TNP.NoOfPending) AS NoOfPending,
         SUM(FDC.NoOfDocumentCompliance) AS NoOfDocumentCompliance,
         DATENAME(month, ad.applicationdate) AS [Year]
     FROM
         AppTypes at
     INNER JOIN
         AssessmentMainDetails am ON at.Category = am.Category 
     INNER JOIN  
         InspectionProcesses i ON am.ReferenceNumber = i.ReferenceNo
     LEFT JOIN
         (SELECT   
              COUNT(Status) AS NoOfDocumentCompliance, 
              ReferenceNumber, Status 
          FROM 
              ApplicationStatus 
          WHERE 
              Status = 'For Document Compliance' 
          GROUP BY 
              ReferenceNumber, Status) AS FDC ON FDC.ReferenceNumber = i.ReferenceNo
     LEFT JOIN 
         (SELECT   
              COUNT(ReferenceNo) AS NoOfAccomplished, 
              ReferenceNo 
          FROM 
              InspectionProcesses    
          WHERE 
              DateOfInspection <> '' 
          GROUP BY 
              ReferenceNo) AS TNA ON TNA.ReferenceNo = i.ReferenceNo
     LEFT JOIN 
         (SELECT   
              COUNT(ReferenceNo) AS NoOfPending, ReferenceNo 
          FROM 
              InspectionProcesses 
          WHERE 
              DateOfInspection = '' 
          GROUP BY 
              ReferenceNo) AS TNP ON TNP.ReferenceNo = i.ReferenceNo
     INNER JOIN 
         ApplicationDetails ad on i.ReferenceNo = ad.ReferenceNumber
     INNER JOIN 
         Companies c on ad.CompanyId = c.CompanyID
     INNER JOIN 
         Zones z on c.zonecode = z.zonecode
     INNER JOIN 
         ZoneGroups zg on z.ZoneGroup = zg.ZoneGroupId 
     WHERE 
         DateOfInspection = '' 
         AND ad.ApplicationDate BETWEEN '2017-08-01' AND '2017-09-30' 
         AND zg.ZoneGroupCode = 'HO' 
         AND z.ZoneCode = 'VIDC'
     GROUP BY
         ItemCode, DATENAME(month, ad.applicationdate)) a
GROUP BY
    a.ItemCode, a.[Year]

这是我的代码,我已经转换了我的日期以获取月份名称。我需要帮助

1 个答案:

答案 0 :(得分:0)

仔细看。那个巨大的派生表(一个很好的有意义的名称btw)与最外面的查询具有相同的group by子句。这意味着[a]每个ItemCode和datename(month,ad.applicationdate)只有一行。因此,在外部查询中没有任何内容可以求和,因为它是按相同的列进行分组。

您还有以下表达式:

  

DateOfInspection =''

根据列名称高度可疑。 DateOfInspection列的数据类型是什么?听起来不应该是基于字符串的。

最后,您发布的错误消息听起来像来自SSRS而不是sql server。是这样的吗?您的查询是否可以从SSMS正确运行?然后问题出现在您的报告中 - 您似乎试图将Year列操作或解释为日期(可能用于排序?)。在您的报表设计中,您的“年份”列实际上是一个月的名称,并且您的结果集不以某种方式包含年份,这似乎也有点短视。当您的数据超过十二个月时会发生什么?如果您有月份名称而不是月份号,您打算如何对报告进行排序?