Ich berechne eine kumulative Anzahl (2 vues aus zwei Tabellen). Ich habe das folgende Ergebnis erzielt. Nun möchte ich die NULL-Werte wie folgt ersetzen: Wenn es die erste Zeile der Tabelle ist, dann muss ich stattdessen den ersten Wert nicht Null einfügen. Für den Rest der Zeilen muss ich den letzten Nicht-Null-Wert einfügen, der vor der aktuellen Zeile steht. Gibt es einen Weg, dies zu erreichen?Ersetzen Null Werte mit Daten aus der gleichen Tabelle
Date | Count1 | Count2
2016-01-01 00:00:00.000 | NULL | 52
2016-01-02 00:00:00.000 | NULL | 54
2016-01-05 00:00:00.000 | 62 | 55
2016-01-08 00:00:00.000 | NULL | 56
2016-01-11 00:00:00.000 | 91 | NULL
2016-01-12 00:00:00.000 | 92 | 59
Gewünschtes Ergebnis:
Date | Count1 | Count2
2016-01-01 00:00:00.000 | 62 | 52
2016-01-02 00:00:00.000 | 62 | 54
2016-01-05 00:00:00.000 | 62 | 55
2016-01-08 00:00:00.000 | 62 | 56
2016-01-11 00:00:00.000 | 91 | 56
2016-01-12 00:00:00.000 | 92 | 59
Die Abfrage, die ich verwendet, um dieses Ergebnis zu erzeugen:
declare @DateCountOpportunities table(d int primary key, c int, cr int)
insert into @DateCountOpportunities
select
datediff(d, 0, IsNull(CreationDate, StartDate)) as d,
count(*) as OpportunitiesCount,
0
from [JobOpportunities]
group by datediff(d, 0, IsNull(CreationDate, StartDate))
declare @rt int = 0
declare @anchor int
update @DateCountOpportunities set
@rt = cr = @rt + c,
@anchor = d
option (maxdop 1)
declare @DateCountRestaurants table(d int primary key, c int, cr int)
insert into @DateCountRestaurants
select
datediff(d, 0, CreatedAt) as d,
count(*) as RestaurantsCount,
0
from [Restaurants]
group by datediff(d, 0, CreatedAt)
declare @rtRes int = 0
declare @anchorRs int
update @DateCountRestaurants set
@rtRes = cr = @rtRes + c,
@anchorRs = d
option (maxdop 1)
Declare @ResultTable table(DateOpportunities DateTime, DateRestaurant DateTime, RestaurantsCount int, OpportunitiesCount int)
insert into @ResultTable
select isnull(DateOpportunities, DateRestaurants) DateOpportunities, isnull(DateRestaurants, DateOpportunities) DateRestaurant, RestaurantsCount, OpportunitiesCount from
(
select
dateadd(d, d, 0) as DateRestaurants,
cr as RestaurantsCount
from @DateCountRestaurants
) Rs
full outer join
(
select
dateadd(d, d, 0) as DateOpportunities,
cr as OpportunitiesCount
from @DateCountOpportunities
)Opp
on Rs.DateRestaurants = Opp.DateOpportunities
order by DateOpportunities
select DateOpportunities as [Date],
RestaurantsCount
,
OpportunitiesCount from @ResultTable
Dies sieht aus wie die Art der Sache, die besser gelöst ist durch das Modifizieren ursprüngliche Abfrage, die das Ergebnis erzeugt, anstatt das, was hier gezeigt wird, als gegeben zu nehmen und sich darüber zu stapeln. Was sind deine Basisdaten und was ist deine aktuelle Abfrage? –
Wenn Sie eine kumulative Zählung durchführen, glaube ich, dass Ihre Antwort in der Abfrage liegt, mit der die von Ihnen angezeigte Ausgabe generiert wird. Was Sie tun möchten, ist möglich, könnte aber kompliziert werden und ist wahrscheinlich nicht notwendig. Können Sie diese Abfrage posten? –
@ JeroenMostert es ist eine komplizierte Abfrage, das Problem ist, dass ich die kumulative Anzahl von zwei separaten Tabellen bekomme. Ich werde die Abfrage veröffentlichen, wenn Sie wollen – Kira