tsql - zusammenfassen - sql zeile mit maximalwert




sql fehlende Zeilen bei Gruppierung nach TAG, MONAT, JAHR (4)

Aufbauend auf dem, was SQLMenace gesagt hat, können Sie einen CROSS JOIN verwenden, um die Tabelle schnell zu füllen oder effizient im Speicher zu erstellen.
http://www.sitepoint.com/forums/showthread.php?t=562806

Wenn ich aus einer Tabellengruppe den Monat, den Tag, das Jahr auswähle, gibt es nur Zeilen mit Datensätzen zurück und lässt Kombinationen ohne Datensätze aus, so dass es auf einen Blick erscheint, dass jeder Tag oder Monat Aktivität hat, Sie müssen sich das Datum ansehen. Spalte aktiv für Lücken. Wie kann ich eine Zeile für jeden Tag / Monat / Jahr, auch wenn keine Daten vorhanden sind, in T-SQL erhalten?


Erstellen Sie eine Kalendertabelle und einen Outer Join für diese Tabelle


Die Aufgabe erfordert einen vollständigen Satz von Datumsangaben, die mit Ihren Daten verknüpft werden können, z.


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 definiert ist als


-- 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


Mein Entwickler hat sich mit diesem Code an mich gewandt und Unterstriche in Bindestriche umgewandelt, weil Unterstriche zerfetzt hat - es ist keine Zahlentabelle erforderlich. Unser Beispiel ist etwas kompliziert, wenn Sie sich einer anderen Tabelle anschließen, aber vielleicht hilft das Codebeispiel irgendwann jemandem.

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 




grouping