2008-09-02 6 views
3

Wenn ich aus einer Tabellengruppe nach Monat, Tag, Jahr, wähle, werden nur Zeilen mit Datensätzen zurückgegeben und Kombinationen ohne Datensätze ausgeschlossen, so dass sie auf einen Blick erscheinen Damit jeder Tag oder Monat Aktivität hat, müssen Sie die Datumsspalte aktiv auf Lücken hin untersuchen. Wie kann ich eine Zeile für jeden Tag/Monat/Jahr erhalten, auch wenn keine Daten in T-SQL vorhanden sind?sql fehlende Zeilen bei Gruppierung nach DAY, MONTH, YEAR

Antwort

1

My developer bekam mit diesem Code zu mir zurück, Unterstrichen zu Striche konvertiert, da Stackoverflow Unterstrichen wurde Mangeln - keine Zahlen Tabelle erforderlich. Unser Beispiel ist durch eine Verknüpfung mit einer anderen Tabelle etwas kompliziert, aber vielleicht hilft das Codebeispiel jemandem irgendwann.

declare @career-fair-id int 
select @career-fair-id = 125 

create table #data ([date] datetime null, [cumulative] int null) 

declare @event-date datetime, @current-process-date datetime, @day-count int 
select @event-date = (select careerfairdate from tbl-career-fair where careerfairid = @career-fair-id) 
select @current-process-date = dateadd(day, -90, @event-date) 

    while @event-date <> @current-process-date 
    begin 
    select @current-process-date = dateadd(day, 1, @current-process-date) 
    select @day-count = (select count(*) from tbl-career-fair-junction where attendanceregister <= @current-process-date and careerfairid = @career-fair-id) 
     if @current-process-date <= getdate() 
     insert into #data ([date], [cumulative]) values(@current-process-date, @day-count) 
    end 

    select * from #data 
    drop table #data 
4

einen Kalender-Tabelle erstellen und äußere Verknüpfung auf dem Tisch

0

Blick in ein numbers table verwenden. Obwohl es hackisch sein kann, ist es die beste Methode, um fehlende Daten schnell abzufragen oder alle Daten anzuzeigen, oder alles, wo Sie Werte innerhalb eines Bereichs untersuchen möchten, unabhängig davon, ob alle Werte in diesem Bereich verwendet werden.

0

Die Aufgabe für einen kompletten Satz von Terminen ruft links verbunden auf Ihre Daten, wie


DECLARE @StartInt int
DECLARE @Increment int
DECLARE @Iterations int

SET @StartInt = 0
SET @Increment = 1
SET @Iterations = 365


SELECT
    tCompleteDateSet.[Date]
  ,AggregatedMeasure = SUM(ISNULL(t.Data, 0))
FROM
        (

            SELECT
                [Date] = dateadd(dd,GeneratedInt, @StartDate)
            FROM
                [dbo].[tvfUtilGenerateIntegerList] (
                        @StartInt,
                        ,@Increment,
                        ,@Iterations
                    )
            ) tCompleteDateSet
    LEFT JOIN tblData t
          ON (t.[Date] = tCompleteDateSet.[Date])
GROUP BY
tCompleteDateSet.[Date]

, wo die Tabellenwertfunktion tvfUtilGenerateIntegerList als

definiert ist


-- Example Inputs

-- DECLARE @StartInt int
-- DECLARE @Increment int
-- DECLARE @Iterations int
-- SET @StartInt = 56200
-- SET @Increment = 1
-- SET @Iterations = 400
-- DECLARE @tblResults TABLE
-- (
--     IterationId int identity(1,1),
--     GeneratedInt int
--)


-- =============================================
-- Author: 6eorge Jetson
-- Create date: 11/22/3333
-- Description: Generates and returns the desired list of integers as a table
-- =============================================
CREATE FUNCTION [dbo].[tvfUtilGenerateIntegerList]
(
    @StartInt int,
    @Increment int,
  @Iterations int
)
RETURNS
@tblResults TABLE
(
    IterationId int identity(1,1),
    GeneratedInt int
)
AS
BEGIN

  DECLARE @counter int
  SET @counter= 0
  WHILE (@counter < @Iterations)
    BEGIN
    INSERT @tblResults(GeneratedInt) VALUES(@StartInt + @counter*@Increment)
    SET @counter = @counter + 1
    END


  RETURN
END
--Debug
--SELECT * FROM @tblResults