2015-11-01 46 views
0

我有兩張表Costtable(Id,ResourceId,Amount,Date)和 ResourceTable(ResourceId,Name)它將輸出顯示爲下面。如何在一個月內顯示'0'數額(如果該月表中沒有數據)

enter image description here

我想表明在9月的情況下0量爲名稱的其餘部分。對於例如如果資源的其餘部分沒有成本表中出現,他們應該在量出現0

我所需的輸出

enter image description here

我當前的查詢

SELECT 
    RG.Id AS Id, 
    RG.Name AS Name, 
    ISNULL(SUM(AC.Amount), 0) AS Amount, 
    RIGHT(CONVERT(varchar(10), AC.[Date], 105), 7) AS [YearMonth] 
FROM 
    Cost AS AC 
    INNER JOIN Resource AS RG ON AC.ResourceGroupId = RG.Id 
WHERE 
    AC.PortalId = '100' AND 
    [Date] >= DATEADD(MONTH, DATEDIFF(MONTH, 0, DATEADD(m, -11, GETDATE())), 0) 
GROUP BY 
    RG.Name, 
    RG.Id, 
    RIGHT(CONVERT(varchar(10), AC.[Date], 105), 7) 
ORDER BY 
    RG.Name DESC 
+0

如果需要使用日期/月的工作,你應該創建一個日期表,無論是一個,每天行或可能還有一個每月一行。這是一個更容易與日曆 –

+0

加入您的成本何時創建缺少的行什麼結果你得到上面的查詢? –

+0

我從我的查詢給予 – user1037747

回答

0

你可以用cross join做到這一點, left join。你的問題很難遵循,因爲你的表格和描述有所不同。然而,這是這樣的想法:

select t.minid, t.name, ym.yearmonth, coalesce(amount, 0) as amount 
from (select name, min(id) as minid from t group by name) n cross join 
    (select distinct yearmonth from t) ym left join 
    t 
    on t.name = n.name and t.yearmonth = ym.yearmonth; 
+0

感謝回答我試過,但不是爲我工作的第一輸出..我有問題 – user1037747

+0

@ user1037747加入我的CURENT查詢。 。 。它怎麼不起作用? –

+0

其實我無法replcate /重寫UR查詢與我 – user1037747

0

只是做一個完全聯合,而不是一個innerjoin只。

這應該做的伎倆。

+0

剛剛那樣做沒有工作... – user1037747

相關問題