Posts
231
Comments
64
Trackbacks
4
August 2007 Entries
Fun mit SQL: Distinct und RowNumber

Im SQL-Server lassen sich die gefundenen Ddatensätze mit Rownumber nummerieren. Diese Funktion kann man z.B. für Paging-Funktionen verwenden:

WITH Result AS
(
SELECT *,ROW_NUMBER()
OVER (ORDER BY [Tabelle].[Feld1]) AS RowNumber
FROM [Tabelle]
INNER JOIN ...
INNER JOIN ...
)
SELECT * FROM Result WHERE RowNumber>=0 AND RowNumber<=20

Wenn das Suchergebnis, z.B. auf Grund von inner Joins, doppelte Ergebnisse zurückgibt ud man diese doppelten Egebnisse mit DISTINCT unterdrücken will, dann stellt man fest, das ROWNUMBER den Befehl DISTINCT ignoriert.  Die Dubletten werden weiterhin - trotz DISTINCT - schön durchnummeriert:

WITH Result AS
(
SELECT DISTINCT *,ROW_NUMBER()
OVER (ORDER BY [Tabelle].[Feld1]) AS RowNumber
FROM [Tabelle]
INNER JOIN ...
INNER JOIN ...
)
SELECT * FROM Result WHERE RowNumber>=0 AND RowNumber<=20

Um dies zu umgehen kann man mit einer weiteren Zwischentabelle (CTE) arbeiten:

WITH Result AS
(
SELECT DISTINCT * FROM [Tabelle]
INNER JOIN ...
INNER JOIN ...
),
Result2 AS
(
SELECT *,ROW_NUMBER() OVER (ORDER BY Name) AS RowNumber
FROM SearchResult
)
SELECT * FROM Result2 WHERE RowNumber>=0 AND RowNumber<=20

Erst in Result2 werden die in Result1 - ohne Dubletten - gefundenen Datensätze mit einer ROWNUMBER versehen.

Mit dem letzten Select schliesslich kann auf dieses Suchergebnis, das ohne Dubletten und mit einer Rownumber versehen ist, zugegriffen werden.

posted @ Friday, August 31, 2007 6:21 AM | Feedback (0)
Strassenkarte bei Google

Bei Webseiten hat man immer wieder die Aufgabe auf der Kontaktseite eine Strassenkarte einzubinden. Auf Grund des Copyrights kann man nicht einfach einen Kartenausschnitt scannen und einbinden.

Bei Goggle (http://maps.google.de) gibt es jetzt die Möglichkeit HTML-Code, zur Einbindung des gesuchten Kartenausschnittes, erstellen zu lassen.


Das Ergebnis kann dann z.B. so aussehen:

In diesem Kartenausschnitt kann man alle Funktionen von Google maps nutzen.
Größere Kartenansicht

posted @ Thursday, August 30, 2007 9:28 AM | Feedback (1)
DataReader immer schön schliessen ...

... sonst erhält man unangenehme Meldungen

   string sql = "select mir was";

   IDataReader reader = base.ExecuteReader(sql);
   if( reader == null ) return null;

   try {
     while( reader.Read() ) {
      ...

    }
   }
   finally {
    reader.Close();
   }

posted @ Wednesday, August 15, 2007 3:41 PM | Feedback (2)
Ermittlung von Monatsdifferenzen mit C#

In c# gibt es keine Funktion für die Ermittlung von Monatsdifferenzen aus zwei Datumwerten.

Deshalb muss man in C#-Programm den Namespace Microsoft.VisualBasic einbinden um diese Funktion, die in VB existiert, verwenden zu können.

using Microsoft.VisualBasic;

[...]

decimal AnzahlMonate;
AnzahlMonate = (int)DateAndTime.DateDiff( DateInterval.Month, Datum1,
 Datum2.AddDays(2), FirstDayOfWeek.Monday, FirstWeekOfYear.System );

posted @ Monday, August 06, 2007 11:24 AM | Feedback (0)
VMware und Ruhezustand

Heute habe ich entdeckt:

Wenn man das Programm VMware, ohne zuvor das Betriebssystem in VMWare ordentlich runterzufahren, schliesst, dann speichert VMware den aktuellen Stand ab.

Beim nächsten Start kann man direkt dort weiterarbeiten wo man aufgehört hat.

posted @ Thursday, August 02, 2007 6:48 AM | Feedback (0)