2017-05-01 7 views
0

sichtbar zu halten Ich muss wissen, wie ich einen Monat Header in einer Tabelle für ein ganzes Jahr sichtbar bleiben kann, auch wenn keine Daten verfügbar sind. Zum Beispiel habe ich diese Tabelle, wenn ich alle Artikel für ganzes Jahr wählen:Wie ich einen Monat Header in SSRS

|Name |Jan |Feb |Mar |Apr |May |Jun |Jul |Aug |Sep |Oct |Nov |Dec | 
|Bike |  |  |  |  |  |  |102 |500 |450 |250 |754 |125 | 
|Glove |154 |625 |245 |200 |147 |365 |248 |784 |987 |145 |204 |321 | 

Aber wenn ich nur ein Element wählen wie (Bike) das Ergebnis ist wie folgt:

|Name |Jul |Aug |Sep |Oct |Nov |Dec 
|Bike |102 |500 |450 |250 |754 |125 

Ich muß siehe die gesamte Tabelle, auch wenn die Daten des Monats leer sind

|Name |Jan |Feb |Mar |Apr |May |Jun |Jul |Aug |Sep |Oct |Nov |Dec | 
|Bike |  |  |  |  |  |  |102 |500 |450 |250 |754 |125 

Vielen Dank für Ihre Hilfe.

Antwort

2

In Ihrer Datasetabfrage müssen Sie ein Set erstellen, das alle Ihre Monatsnamen enthält. Fügen Sie dann die Verknüpfung zu Ihrem bestehenden Datensatz hinzu.

Select [columns] 
From MonthNames as MN 
left join Sales as S 
on MN.MonthName = S.MonthName 

Monate, die keine Daten haben, haben immer noch einen Datensatz, aber der Wert ist NULL. Stellen Sie sicher, dass Sie das Monatsname-Feld aus dem MonthName-Satz und nicht dem Verkaufssatz verwenden. Dadurch wird sichergestellt, dass Sie für jeden Monat mindestens einen Datensatz haben, auch wenn in diesem Monat keine Umsätze erzielt wurden.


Ich kann nicht sagen, woher alle Ihre Spalten kamen, also musste ich einige Annahmen machen. In Zukunft wäre es hilfreich, den Tabellenalias vor jeder Spalte zu verwenden.

Try this:

SELECT Name, 
     UnitPrice, 
     Q1.MONTH, 
     Q1.MONTH2 
FROM TEST.dbo.MonthList AS Q1 
    LEFT JOIN 
     (SELECT *, 
        YEAR(ModifiedDate) AS YEAR 
      FROM AdventureWorks2012.Sales.SalesOrderDetail AS Q2 
      INNER JOIN AdventureWorks2012.Production.Product AS Q3 
       ON Q2.ProductID = Q3.ProductID 
      WHERE YEAR(ModifiedDate) = @YEAR 
       AND Name IN (@NAME) 
     ) AS Q 
    ON Q1.MONTH2 = MONTH(Q.ModifiedDate) 
WHERE Q1.MONTH IN (@MONTH); 

Die vereinfachte Version ist

Select [columns] 
From MonthNames as MN 
left join (select [columns] from Products Inner join Sales ON ... WHERE [Product & Sales filters]) as S 
on MN.MonthName = S.MonthName 
+0

ich Ihre Empfehlung bin folgen, aber der Tisch immer noch das gleiche Ergebnis zu tun. Das ist, was ich tue: SELECT [Name] , [Einzelpreis] , Q1 [MONAT] , Q1.MONTH2 VON [TEST] [dbo] [Month] Q1 LEFT JOIN (SELECT... *, YEAR ([ModifiedDate]) AS [YEAR] VON [AdventureWorks2012]. [Verkauf]. [SalesOrderDetail] WHERE Jahr ([ModifiedDate]) = @YEAR) Q2 ON Q1. [MONTH2] = MONAT (Q2 . [ModifiedDate]) INNER [AdventureWorks2012] JOIN. [Herstellung]. [Produkt] Q3 Q2.ProductID ON = Q3.ProductID WHERE Q1. [Monat] IN (@MONTH) AND YEAR (Q2. [ModifiedDate ]) = @YEAR AND [Name] IN (@NAME) – Mario

+0

Ihr innerer Join eliminiert alle Monate, die kein Produkt und kein YEAR haben (Q2.ModifiedDate) = @Year erfordert auch, dass es für jedes Q1 eine Q2-Zeile gibt. Wenn Name nicht von Q1 ist, würde das Monate ohne Produkte auch beseitigen –

+0

Vielen Dank !!!! Jetzt zeigt der Bericht die gesamte Tabelle an, wie ich sie brauche. Du bist der beste!! – Mario

Verwandte Themen