SQL仅从YYYYMMDD int格式中选择月份

时间:2016-12-30 17:04:50

标签: sql-server reporting-services ssrs-2012

我目前正在尝试编写一个脚本,通过查看TransactionDate列(YYYYMMDD int)来显示每个月为员工制作的销售数量。我尝试使用CAST LEFT方法仅查看TransactionDate的YYYYMM部分,但我仍然会获得重复的销售人员姓名,其中包含他们在特定月份销售的每一天的个人计数。简单地获得一个月的个人总销售额,而不是显示该月每天的名称和数量,最好的方法是什么?这是需要在脚本中解决的问题还是可以在SSRS报告矩阵中修复?

select s.FirstName + s.LastName as 'Sales Person',
    s.DepartmentID as 'Department ID',
    count(fact.EmpID),
    CAST(LEFT(CAST(fact.TransactionDateKey AS VARCHAR(100)), 6) AS INT)
from Final.DimSalesPerson s
    inner join Final.FactRxTransactionDay fact
        on fact.EmpID = s.EmpID
where fact.TransactionDateKey between 20161101 and 20161229
group by s.FirstName + s.LastName,
    s.DepartmentID,
    fact.TransactionDateKey

2 个答案:

答案 0 :(得分:2)

您需要按CAST(LEFT(CAST(fact.TransactionDateKey AS VARCHAR(100)), 6) AS INT)而不是fact.TransactionDateKey进行分组。

select s.FirstName + s.LastName as 'Sales Person',
    s.DepartmentID as 'Department ID',
    count(fact.EmpID),
    CAST(LEFT(CAST(fact.TransactionDateKey AS VARCHAR(100)), 6) AS INT)
from Final.DimSalesPerson s
    inner join Final.FactRxTransactionDay fact
        on fact.EmpID = s.EmpID
where fact.TransactionDateKey between 20161101 and 20161229
group by s.FirstName + s.LastName,
    s.DepartmentID,
    CAST(LEFT(CAST(fact.TransactionDateKey AS VARCHAR(100)), 6) AS INT)

答案 1 :(得分:1)

另一个选项是TransactionDate / 100,它将从YYYYMMDD int返回YYYYMM。

Select s.FirstName + s.LastName as 'Sales Person',
    s.DepartmentID as 'Department ID',
    count(fact.EmpID),
    fact.TransactionDateKey/100 as 'Period'
from Final.DimSalesPerson s
    inner join Final.FactRxTransactionDay fact
        on fact.EmpID = s.EmpID
where fact.TransactionDateKey between 20161101 and 20161229
group by s.FirstName + s.LastName,
    s.DepartmentID,
    fact.TransactionDateKey/100