Announcement

Collapse
No announcement yet.

Problem mit GROUP BY und NTEXT-Feld

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit GROUP BY und NTEXT-Feld

    Hallo,

    ich habe ein Problem beim Erstellen einer Abfrage. Ich möchte aus einer Tabelle mit einem Feld
    vom Typ NTEXT (16) den jeweils vom Datum des Eintrages letzten Wert zusammen mit den
    Stammdaten aus einer anderen Tabelle anzeigen lassen, also so:

    <PRE>
    SELECT
    dbo.TStammdaten.ID, MAX(DISTINCT dbo.TComments.CommentDate) AS Date, dbo.TComments.Comment
    FROM
    dbo.TStammdaten LEFT OUTER JOIN dbo.TComments
    ON dbo.TStammdaten.ID = dbo.TComments.ID
    GROUP BY dbo.TStammdaten.ID
    <PRE>

    Das funktioniert allerdings nicht, da NTEXT-Typen offenbar nicht in einer Abfrage mit
    GROUP BY verwendet werden kann? (Das Comment-Feld ist von diesem Typ)

    Man könnte nvarchar (4000) daraus machen, allerdings können die Texte wesentlich länger
    als 4000 Zeichen sein.

    Eine andere Idee war nur einen Auszug aus dem Feld zu holen und sie mit einem CAST in
    beispielsweise nvarchar (4000) umzuwandeln - für die Abfrage würde das reichen. Das klappt
    allerdings auch nicht.

    Vielleicht ha jemand von Euch eine Idee? Ich wäre dankbar für Hinweise.

    Gruß
    Reiko

  • #2
    In dem Fall gibt es wohl nur eines: Betatester für SQL 2005 werden.
    Im SQL Server 2005 (und natürlich auch in dessen kleinem Bruder, dem SQL Express, der die MSDE ablöst) werden die bisherigen Strings mit 8000 Byte Grenze dann Short Strings heissen und die varchar und nvarchar bis zu 2^31 Byte (ist 2 Gb, oder?) groß werden können, also TEXT damit komplett ersetzen können.
    Eine einfache Lösung für den Server 2000 kann ich dir leider nicht anbieten.

    bye,
    Helmu

    Comment


    • #3
      Moin,

      wenn dir die Eindeutigkeit der ersten 4000 Zeichen in der Comment Spalte ausreicht(wenns wirklich ein Kommentar ist sollte man das Annehmen) könntest du die Gruppierung in einem Subselect ablaufen lassen und eben dort in der Gruppierung casten ohne das du gezwungen bist auch nur die gecastete Spalte zurück zuliefern.

      SELECT o.[ID], o.CommentDate AS [Date], o.Comment
      FROM TStammdaten o
      INNER JOIN ( SELECT [ID], MAX(CommentDate) AS CommentDate, Comment
      FROM TStammdaten
      GROUP BY Process_ID,cast(Comment as varchar(4000))) i ON i.[ID] = o.[ID] and i.CommentDate = o.CommentDate

      Gruß
      Ral

      Comment

      Working...
      X