AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Select Datepart mit Sortierung
Thema durchsuchen
Ansicht
Themen-Optionen

Select Datepart mit Sortierung

Ein Thema von renekr · begonnen am 22. Mai 2006 · letzter Beitrag vom 24. Mai 2006
Antwort Antwort
renekr

Registriert seit: 27. Feb 2005
Ort: Karlsbad
534 Beiträge
 
Delphi 2007 Enterprise
 
#1

Select Datepart mit Sortierung

  Alt 22. Mai 2006, 10:51
Datenbank: SQL Server 2005 • Version: 2005 STD • Zugriff über: ADO
Hi,
hab folgendes Thema:

Mache einen Select mit

SQL-Code:
SELECT TOP (100) PERCENT CONVERT(CHAR(4), DATEPART(yyyy, Stoer_Zeit)) + ' ' + CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)) AS Jahr_KW,
                      COUNT(Kennummer) AS Einträge, SUM(Prod_min) AS Prod, SUM(PM_min) AS PM, SUM(Prod_min + PM_min) AS PROD_PM, MAX(Prod_min + PM_min)
                      AS Prod_PM_MAX_KW
FROM dbo.Aktionsdaten
GROUP BY CONVERT(CHAR(4), DATEPART(yyyy, Stoer_Zeit)) + ' ' + CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit))
ORDER BY Jahr_KW
Ergebnissnur Ausschnitt )
2002 19 40 1300 1365 2665 330
2002 2 25 1030 1605 2635 720
2002 20 76 1981 3256 5237 480
...
2002 39 55 1842 2800 4642 620
2002 4 50 2399 2810 5209 600
2002 40 36 4412 1747 6159 4200


Nun ist das Problem das die Jahr KW nicht stimmen vom Ablauf her.
Normal muss die KW. 2 ganz oben kommen.

Hat jemand eine Idee?
Danke.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Select Datepart mit Sortierung

  Alt 22. Mai 2006, 10:59
Hallo René,

entweder du verbaust die KW zweistellig mit evtl. führender Null oder du sortierst nach Jahr und KW getrennt und numerisch.

Grüße vom marabu
  Mit Zitat antworten Zitat
renekr

Registriert seit: 27. Feb 2005
Ort: Karlsbad
534 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Select Datepart mit Sortierung

  Alt 22. Mai 2006, 18:42
Hi,
also:

Wenn ich es mit der Führenden 0 mache wie muss ich es dann machen das ich im SQL String bfragen kann ob 1 oder 2 Stellig und jenachdem dann eine0davor?

Oder

Das Jahr mit Convert bekomme ich als Char zurück wie kann ich es als Zahl zurückbekommen?

Danke.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Select Datepart mit Sortierung

  Alt 22. Mai 2006, 19:04
Zum einen liefert dir DatePart() einen Integer-Wert. Erst durch Convert() erzeugst du daraus einen String. Zum anderen kannst du einen String KW mit führenden Nullen ausstatten indem du ihm die gewünschte Zahl an Nullen voranstellst und dann die gewünschte Länge am Ende wieder wegnimmst:

Right('00' + KW, 2) marabu
  Mit Zitat antworten Zitat
renekr

Registriert seit: 27. Feb 2005
Ort: Karlsbad
534 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Select Datepart mit Sortierung

  Alt 22. Mai 2006, 23:34
Hi marabu,
Also ich glaub isteh grad kräftig auf der Leitung .
Hab es nun so gemacht.

SQL-Code:
SELECT TOP (100) PERCENT CONVERT(CHAR(4), DATEPART(yyyy, Stoer_Zeit)) + ' ' + CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)) AS Jahr_KW,
                      RIGHT('00' + CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)), 2) AS KW
FROM dbo.Aktionsdaten
ORDER BY Jahr_KW
Result:

2002 1 # 1
2002 10 # 10


I blick grad net mehr durch.

danke
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#6

Re: Select Datepart mit Sortierung

  Alt 23. Mai 2006, 00:33
Hi,
ich habe es eben mal so versucht ...

SQL-Code:

SELECT TOP 100 PERCENT
    CAST( DATEPART(yyyy, Stoer_Zeit) AS CHAR(4) )
    + ' ' +
    RIGHT('00' + CAST( DATEPART( WEEK, Stoer_Zeit ) AS VARCHAR(2) ) ,2)
    AS Jahr_KW
FROM dbo.Aktionsdaten

ORDER BY
    CAST( DATEPART(yyyy, Stoer_Zeit) AS CHAR(4) )
    + ' ' +
    RIGHT('00' + CAST( DATEPART( WEEK, Stoer_Zeit ) AS VARCHAR(2) ) ,2)
Test:

SQL-Code:
DECLATE @D DATETIME
SET @D = CAST('1.1.2004AS DATETIME)

SELECT CAST( DATEPART( YEAR, @D ) AS CHAR(4) )
       + ' ' +
       RIGHT('00'+CAST (DATEPART (WEEK,@D) AS VARCHAR(2) ) ,2)
Ausgabe: 2004 01 Scheint also zu funktionieren.

Dein Fehler ist, das CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)), 2) auch bei einstelligen Tagen 2 Zeichen lang ist. Somit ergibt RIGHT ( '00' + CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)), 2) ) immer CONVERT(CHAR(2), DATEPART(wk, Stoer_Zeit)), 2) Bei Einstelligen Tagen wäre das Ergebins also "2003 2 ".


Schreibe dir am besten eine kleine UDF, damit die Abfragen nicht unübersichtlich werden.

SQL-Code:
CREATE FUNCTION GetYearKw (
  @Date DATETIME
)
RETURNS VARCHAR(7)
AS
BEGIN
  -- Gibt das Jahr und die KW von @Date im Format "2004 15" zurück
  DECLARE @Res VARCHAR(7)

  SELECT @Res =
       CAST( DATEPART( YEAR, @Date ) AS CHAR(4) )
       + ' ' +
       RIGHT('00'+CAST (DATEPART (WEEK,@Date) AS VARCHAR(2) ) ,2)
  
  RETURN @Res

END
Aufruf:

SQL-Code:
SELECT TOP 100 PERCENT
    dbo.GetYearKw(Stoer_Zeit) AS Jahr_KW

FROM dbo.Aktionsdaten

ORDER BY
     dbo.GetYearKw(Stoer_Zeit)
Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
renekr

Registriert seit: 27. Feb 2005
Ort: Karlsbad
534 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Select Datepart mit Sortierung

  Alt 24. Mai 2006, 07:57
Hi Jens,
Wow bin platt.

Vielen Dank.
Da muss i wohl noch einiges Lernen in bezug auf SQL.

Werd es sofort mal testen und die UDF auch natürlich,das ist echt eine riesen Erleichterung.
Vielen Vielen Dank.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz