Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Gruppera på resultatet av en User Defined Function

Postades av 2005-09-30 11:56:37 - Per Hultqvist, i forum sql-server/msde, Tråden har 6 Kommentarer och lästs av 728 personer

Låt säga att jag har en massa poster med ett datum och något numeriskt värde (belopp,antal el dyl). Dessutom finns ett kundnummer på raden. Alltså :
<info>
Tabell : Reservationer
-------------------------
Kundnr int
Datum datetime
Belopp double
</info>
Nu vill skapa en rapport som är grupperad först per kund och sedan per vecka, där beloppet är summerat över veckan. Här är SQL:en som genererar korrekt resultat. Se [Omvandla datum till veckonummer (ISO)] för funktionen GetISOWeekNumber():

SELECT Kundnr, dbo.GetISOWeekNumber(Datum) as WeekNumber, SUM(Belopp)
FROM Reservationer
GROUP BY Kundnr, dbo.GetISOWeekNumber(Datum)

Detta fungerar men är detta det bästa sättet? Det som stör mig är att jag måste skriva funktionsanropet två gånger. Innebär detta att funktionen GetISOWeekNumber nu anropas två ggr per rad? Observera att det inte går att gruppera på aliaset WeekNumber.


Svara

Sv: Gruppera på resultatet av en User Defined Function

Postades av 2005-09-30 12:06:13 - Mikael Wedham

Jag har för mig att den optimeras till att bara köras en gång per rad.

/micke


Svara

Sv:Gruppera på resultatet av en User Defined Function

Postades av 2005-09-30 13:19:22 - Per Hultqvist

Tyvärr blir det bara värre och värre, nu ser den ut så här :

select GlobalCustomer_ID,
         dbo.GetISOWeekNumber(ExpectedShippingDate) as WeekNumber,
         SUM(Price)
from CustomerOrderDelivery
left join CustomerOrderRow on CustomerOrderRow.CustomerOrderRow_ID = CustomerOrderDelivery.CustomerOrderRow_ID
left join CustomerOrderHead on CustomerOrderHead.CustomerOrderHead_ID = CustomerOrderRow.CustomerOrderHead_ID
where dbo.GetISOWeekNumber(ExpectedShippingDate)<=dbo.GetISOWeekNumber(GetDate())+10
group by GlobalCustomer_ID, dbo.GetISOWeekNumber(ExpectedShippingDate)
order by GlobalCustomer_ID, dbo.GetISOWeekNumber(ExpectedShippingDate)


:-)


Svara

Sv: Gruppera på resultatet av en User Defined Function

Postades av 2005-09-30 22:56:10 - Per Karlsson

En metod är ju att göra aggregeringen på en nivå utanför. Exempel:
<CODE>
SELECT Kundnr, WeekNumber, SUM(Belopp)
FROM
(
SELECT Kundnr, dbo.GetISOWeekNumber(Datum) as WeekNumber, Belopp
FROM Reservationer
) a
GROUP BY Kundnr, WeekNumber
</CODE>

/Pelle


Svara

Sv:Gruppera på resultatet av en User Defined Function

Postades av 2005-10-05 09:58:17 - Per Hultqvist

Detta får jag inte att fungera, är det verkligen tillåtet syntax i T-SQL?


Svara

Sv: Gruppera på resultatet av en User Defined Function

Postades av 2005-10-07 20:06:56 - Per Karlsson

Ja, förutsatt att fältnamn, udf mm är rätt, så kommer den att fungera rakt av...
Den inre select-satsen brukar man kalla en "deriverad tabell" eller "inline view". Det är nödvändigt att ge denna ett alias, "a" efter parentesen i mitt exempel ovan.
Det är tillåten syntax, i såväl T-SQL som i ANSI-92-standarden.


Svara

Sv:Gruppera på resultatet av en User Defined Function

Postades av 2005-10-07 22:15:39 - Per Hultqvist

Jag testade nu igen och det fungerar klockrent. Jag måste ha missat något, kanske aliaset på subqueryn (dervierade tabellen)...tack!


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 619
27 953
271 709
489
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies