Jag har en fråga som tar ut konto, datum och tid ur en tidsbank. Om du har en tabell innehållande alla datum så kan du göra en join. Annars om du har sql så kan du skriva en cursor som hanterar detta. Sen finns ytterligare en variant och det är att använda asp eller kanske vb för att loopa ett gäng dagar och lista dessa. Om du vänder på din GROUP BY till DATUM och därefter KONTO så bör du få med alla datum som finns inom perioden. Jag inbillar mig att det förutsätter att det står 0 i minst en post för kontot, det datumet/datumintervallet. >SELECT KONTO, DATUM SUM(TID) FROM TABELL GROUP BY KONTO, DATUM ORDER BY >KONTO, DATUMFå in lite extra info i en selectfråga...
Frågan baseras på datumperiod och summerar tiden...
Datat ska grupperas på konto, datum och ha samma sortering.
Just nu ser det ut som detta om man tar perioden 2003 01- 2003 03:
A 0302 12
B 0301 13
B 0303 23
C 0303 34
D 0301 14
D 0302 34
D 0303 21
osv...
Problemet är att jag vill alltid få ut ALLA datum även om det inte finns något på konto A för 0301 och 0303 så vill jag ha det till 0. I detta exempel skulle det finnas tre stycken A, B, C, osv...
Är detta möjligt?
Frågan ser idag ut på följande sätt
SELECT KONTO, DATUM SUM(TID) FROM TABELL GROUP BY KONTO, DATUM ORDER BY KONTO, DATUM
Väldigt tacksam för svar så jag slipper gnugga dom små grå för mycket :)Sv: Få in lite extra info i en selectfråga...
Sen samtidigt har du ett recordset där du kollar dag för dag om datumet överensstämmer med det datum du fick i ditt recordset. Finns en matchning fyller du på med informationen och sen in i listrutan.
Eftersom jag inte vet språket kan jag inte ge exempel men kan ge dig en tankemodell:
1. Hämta datat i ett recordset.
2. Läs in det som en array och stäng recordset
3. Börja loopa ett gäng datum
4. Finn matchningarna och uppdatera post för post
5. Presentera resultatet
<code>
Set rst = con.execute("select -----")
Array = Rst.GetRows()
Rst.Close
For CurrentDay = FirstDate To DateAdd("m", intervallid, FirstDate)
lstPoster = lstPoster & "<option ....."
If CurrentDay = Array(x) Then
lstPoster = lstPoster & " mer data"
End If
lstPoster = lstPoster & "</option>"
Next
</code>
Sen skall det bara presenteras som en dropruta:
<code>
<select size="1" name="lstPoster" class="listruta" style="width: 235; height: 23">
<option value="-1">-- välj post --</option>
<%=lstPoster%>
</select>
</code>Sv: Få in lite extra info i en selectfråga...
Sv: Få in lite extra info i en selectfråga...
Nej, du kan inte få fram information som inte existerar i databasen. Du kan alltid fabricera informationen typ:
create table #date
(
d datetime
)
set nocount on
declare @startdate datetime,
@enddate datetime
select @startdate = '2001-01-01', @enddate = getdate()
while (@enddate > @startdate)
BEGIN
insert into #date values (@startdate)
select @startdate = dateadd(day, 1, @startdate)
END
SELECT KONTO, substring(convert(varchar(10), d, 112),3,4), SUM(TID)
FROM TABELL
RIGHT JOIN #date on substring(convert(varchar(10), d, 112),3,4) = Datum
GROUP BY KONTO, substring(convert(varchar(10), d, 112),3,4)
ORDER BY 2, Konto
Order by 2 = Sortera på andra kolumnen
Att jag har substring(convert(varchar(10), d, 112),3,4) beror på att du lagrat ditt datum i "ååmm" (något som du egentligen bör undvika om du kan det).
/Tomas