Avatar billede nickbuus Nybegynder
08. april 2008 - 08:22 Der er 3 kommentarer og
1 løsning

sortere efter hver dag i en måned - og joine to tabeller

Jeg har to tabeller :

clicktrack:

Hver række indeholder det samlede antal clicks den pågældende dag.
eks.
id  dato      clicks
1. 2/4-2008 :  40
2. 3/4-2008 :  30

Jeg har nu brug for en query der viser alle dage i en måned og det samlede antal clicks pr. dag. Det kan ske at der ingen clicks har været den pågældende dag - og der derfor ikke er nogen række oprettet til dagen. I det tilfælde skal clicks for den dag sættes til 0.

Den anden tabel kaldet SalesTrack:
id  dato    sale
1. 2/4-2008    1500DKK
2. 2/4-2008    500DKK
2. 3/4-2008    200DKK

Det skal også vises i resultatet sådan at har der været 2 salg den pågældende dag skal de lægges sammen eks. (1500+500 d. 2/4)

Resultatet skal se således ud:

id  dato      antalSalg  Beloeb
1. 1/4-2008 0    0          0
1. 2/4-2008 40    2          2000
2. 3/4-2008 30    1          200
3. 4/4-2008 0    0          0
osv frem til d. 30

Kan nogen hjælpe med en sqlquery der kan lave en sådan forespørgsel.
Avatar billede nickbuus Nybegynder
08. april 2008 - 09:45 #1
Declare @year int, @month int, @StartDate datetime, @EndDate datetime
Declare @Date datetime

SET @year = 2008
SET @month = 4
SET @StartDate = cast(cast(@month as varchar(10)) + '-1-' + cast(@year as varchar(10)) as datetime)
SET @EndDate = dateadd(m,1,@StartDate)

DECLARE @temp TABLE (Date_Time datetime)

SET @Date = @StartDate

While @Date < @EndDate
  BEGIN
     
      INSERT INTO @temp
      SELECT @Date
     
      SELECT @Date = dateadd(d,1, @Date)
  END

SELECT * from @temp LEFT JOIN ClickTrack on (ClickTrack.trackDate = Date_Time AND shopId = 1)
END
GO


jeg har fået fixet ovenstående sammen som virker fint til at vise antal clicks per dag og samtidig vise alle dagene i måneden - men hvordan får jeg også vist antal salg per dag.
Avatar billede nickbuus Nybegynder
08. april 2008 - 10:09 #2
ALTER PROCEDURE GetMonthlyClicksAndSales
    -- Add the parameters for the stored procedure here
(
        @shopId int,
        @trackMonth int,
        @trackYear int
)
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    Declare @year int, @month int, @StartDate datetime, @EndDate datetime
Declare @Date datetime

SET @year = 2008
SET @month = 4
SET @StartDate = cast(cast(@month as varchar(10)) + '-1-' + cast(@year as varchar(10)) as datetime)
SET @EndDate = dateadd(m,1,@StartDate)

DECLARE @temp TABLE (Date_Time datetime)

SET @Date = @StartDate

While @Date < @EndDate
  BEGIN
     
      INSERT INTO @temp
      SELECT @Date
     
      SELECT @Date = dateadd(d,1, @Date)
  END

SELECT T.Date_Time, SUM(S.Amount) as Amount, count(*) as antalSalg , MIN(CT.Clicks) as Clicks from @temp T
LEFT JOIN ClickTrack CT on CT.trackDate = T.Date_Time AND shopID = 1
LEFT JOIN TrackSales S ON S.ShopID=CT.ShopID AND CT.TrackDate=S.SaleDate GROUP BY T.Date_Time
END
GO


ny og forbedret version - men skal have nogen til at hjælpe med COUNT(*) - nu returneres der 1 - også selvom intet salg er foretaget den dag - er der lavet mere end 1 salg den pågældende dag - men dage hvor intet salg er foretaget skal rettes til 0.
Avatar billede nickbuus Nybegynder
08. april 2008 - 10:13 #3
prøver lige igen :
skal have hjælp med COUNT(*)  nu returneres der 1 - også selvom intet salg er foretaget den dag - er der lavet mere end 1 salg den pågældende dag er tallet der returneres korrekt - men dage hvor intet salg er foretaget skal returnere 0.
Avatar billede nickbuus Nybegynder
08. april 2008 - 16:17 #4
nå jeg knokler videre selv - kan desværre ikke vente længere på svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester