SQL Select 只有 YYYYMMDD int 格式的月份

SQL Select only month from YYYYMMDD int format

我目前正在尝试编写一个脚本,通过查看 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

您需要按 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)

另一种选择是 TransactionDate/100 它将 return 来自 YYYYMMDD 整数的 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