Announcement

Collapse
No announcement yet.

Alias-Problem: Gleiche Spalte, unterschiedlicher Datensatz, 1 ID

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

  • Alias-Problem: Gleiche Spalte, unterschiedlicher Datensatz, 1 ID

    Hallo,

    mein Problem ist wie folgt:<br>
    Tabelle
    =====<br>
    PK_ID | CustID | InfoID | Context | Value
    ===========================
    1 1 1 0 Franz
    2 1 1 1 Mayer
    3 1 2 1 Rolskirson<br>
    Ich würde gerne jetzt folgende Abfragelogik erstellen:
    Wähle für jeden Kunden alle Datensätze für die CustID = 1
    und InfoID >= 1 gilt.
    Führe jeweils Value vom Context = 0 und Context = 1
    als Name zusammen.
    Falls eines der beiden Felder leer ist oder nicht existiert, dann nimm nur eines und füge es in Name ein.<br>
    Das gewünschte Ergebnis sollte so aussehen.
    Name
    ====
    Franz Mayer
    Rolskirson<br>
    Hat es Sinn in diesem Fall einen Cursor ( DECLARE ContactPerson_Cursor CURSOR FOR ) zu verwenden? <br>
    Ich steh grad auf'm Schlauch.
    Thx.

  • #2
    Hallo,
    angenommen, in der Datenbank ist die folgende Tabelle vorhanden:
    <code>
    USE tempdb
    <b>GO</b>

    <b>CREATE</b> <b>TABLE</b> <b>Test</b>
    (
    pk_id <b>INT</b> <b>NOT</b> <b>NULL</b> <b>IDENTITY</b> <b>PRIMARY</b> <b>KEY</b>,
    custid <b>INT</b> <b>NOT</b> <b>NULL</b>,
    infoid <b>INT</b> <b>NOT</b> <b>NULL</b>,
    context <b>INT</b> <b>NOT</b> <b>NULL</b>,
    wert NVARCHAR(19) <b>NOT</b> <b>NULL</b>
    )
    <b>GO</b>

    <b>INSERT</b> <b>INTO</b> <b>Test</b> (custid,infoid,context,wert) <b>VALUES</b> (1,1,0,<font color="#9933CC">'Franz'</font>);
    <b>INSERT</b> <b>INTO</b> <b>Test</b> (custid,infoid,context,wert) <b>VALUES</b> (1,1,1,<font color="#9933CC">'Mayer'</font>);
    <b>INSERT</b> <b>INTO</b> <b>Test</b> (custid,infoid,context,wert) <b>VALUES</b> (1,2,1,<font color="#9933CC">'Rolskirchen'</font>);
    <b>GO</b>
    </code>
    Wenn auf <i>Derived Tables</i> zurückgegriffen wird, kann das Ziel auch ohne CURSOR erreicht werden (allerdings müsste dann der unterstellte Aufbau über <i>context</i> und <i>infoid</i> auch tatsächlich so gelten):
    <code>
    <b>SELECT</b> t0.wert + <font color="#9933CC">' '</font> + t1.wert
    <b>FROM</b> dbo.<b>Test</b> t
    <b>JOIN</b> (<b>SELECT</b> custid, wert <b>FROM</b> dbo.<b>Test</b>
    <b>WHERE</b> context = 0 <b>AND</b> infoid = 1) t0 <b>ON</b> t.custid = t0.custid
    <b>JOIN</b> (<b>SELECT</b> custid, wert <b>FROM</b> dbo.<b>Test</b>
    <b>WHERE</b> context = 1 <b>AND</b> infoid = 1) t1 <b>ON</b> t.custid = t1.custid
    <b>WHERE</b>
    t.custid = 1 <b>AND</b> t.infoid &gt;= 1
    <b>UNION</b>
    <b>SELECT</b> wert
    <b>FROM</b> dbo.<b>Test</b> t
    <b>WHERE</b>
    t.custid = 1 <b>AND</b> t.infoid = 2
    </code>
    Der SQL Server liefert das folgende Ergebnis zurück:
    <code>

    ---------------------------------------
    Franz Mayer
    Rolskirchen

    (2 row(s) affected)
    </code&gt

    Comment


    • #3
      Vielen Dank für den Hinweis.
      Ich werde mir das genauer ansehen.

      MfG
      deityso

      Comment

      Working...
      X