2016-12-30 32 views
1

我目前正在嘗試編寫一個腳本,通過查看TransactionDate列(YYYYMMDD int)來顯示員工爲每個月所做的銷售數量。我嘗試使用CAST LEFT方法僅查看TransactionDate的YYYYMM部分,但我仍然獲得重複的銷售人員姓名以及針對該特定月份銷售的每個日期的個人計數。最好的方法是簡單地獲得一個月的個人總銷售額數量,而不是在當月的每一天顯示他們的姓名和數量?這是需要在腳本中解決還是可以在SSRS報告矩陣中解決的問題?SQL從YYYYMMDD中僅選擇月份int格式

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

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

只是另一個選項是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