Pergunta : Como posso eu incluir meses com fileiras zero no vendas pelo relatório de Mês

Olá! os indivíduos,

I têm TSQL para começ me os dados para um relatório/gráfico que mostra vendas em o mês.  Entretanto, enquanto retorna os valores corretos se não há nenhuma fileira por um mês particular nada é retornado.  Em tal situação eu preciso de retornar uma fileira adicional com um valor zero para cada mês faltante. o

How pode melhor de I conseguir este satisfaz?  

Chris Bray
class= > " desobstruído " do
> do " codeSnippet " do class= do
class= " lineNumbers " do
class= do
1:
2:
3:
4:
5:
6:
7:
8:
9:
ANO notpretty do >SELECT " do class= " de " codeSnippet797449 do id= do
           
class= do

Resposta : Como posso eu incluir meses com fileiras zero no vendas pelo relatório de Mês

>> outra vez, não inteiramente prático.  Nós terminaríamos acima com uma tabela enorme com o diário de MinDate a MaxDate incluído.  Tem que haver uma maneira melhor? <>
Eu concordo.

Em lugar de, criar uma tabela de números seqüenciais -- uma tabela do “registro”, se você já não tem um.
Então você pode fazer algo como abaixo.

RE: mecânicos da tabela do registro::
Apenas números seqüenciais de 0 a o que quer que, dizem 100.000.  Especific um índice original, aglomerado no número, com um fillfactor de 100 (esta tabela nunca será atualizado ou introduzido entre fileiras existentes, tão não há nenhuma necessidade para freespace na tabela).  Para o desempenho máximo, ajustá-lo a de leitura apenas (if/when você precisa de adicionar fileiras, naturalmente você o ajustaria temporariamente a updateable outra vez).
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
DECLARAR o datetime do @startDate
DECLARAR o datetime do @endDate

SELECIONAR O ANO (DATEADD (MÊS, sn.num, TransactionDate)) COMO TransactionYear,
MÊS (DATEADD (MÊS, sn.num, TransactionDate)) COMO TransactionMonth,
SOMA (coalescer (BaseDebitAmount, 0) - coalesce (BaseCreditAmount, 0)) COMO GrossMonthlySales

Do sn sequentialNumbersTable 
EXTERIORES ESQUERDOS JUNTAM-SE a GeneralJournal em TransactionDate ENTRE DATEADD (MÊS, sn.num, @startDate) E DATEADD (MS, -3, DATEADD (MÊS, sn.num + 1, o @startDate))

ONDE sn.tally ENTRE 0 E DATEDIFF (MÊS, @startDate, @endDate)
E… outras condições como antes…
Outras soluções  
 
programming4us programming4us