dey: Abfrage mit Anspruch

Hallo,

ich versuche eine Abfrage zu machen, die Gruppen vergleicht:

<gruppe>1
 ....
 <pos>1-1.. <result>add.. <width>8..
 <pos>1-2.. <result>add.. <width>8..
 <pos>1-3.. <result>add.. <width>8..
 <pos>1-5.. <result>add.. <width>12..

<gruppe>2
 ....
 <pos>1-1.. <result>change.. <width>8..
 <pos>1-2.. <result>add.. <width>8..
 <pos>1-3.. <result>Delete.. <width>8..
 <pos>1-5.. <result>change.. <width>12..

Ich möchte nun zählen wieviele posotionen in Gruppe 1 bei width 8 haben bei denen in Gruppe 2 bei der gleichen position result delete oder change ist

Mir fehlt der Ansatz, wie ich bei count auf den Positionsvergleich komme.

bydey

--
-- noch immer ein erfolgloser <DIV> Jünger --
  1. Hallo,

    Mir fehlt der Ansatz, wie ich bei count auf den Positionsvergleich komme.

    Ich habe da unter Access mal ein SQL-Statement erzeugt mit dem ich es unter SQL schaffen würde.

    SELECT gruppe1.width, Count(gruppe2.pos) AS [Anzahl von pos]
    FROM gruppe1 INNER JOIN gruppe2 ON gruppe1.pos = gruppe2.pos
    WHERE (((gruppe2.result)="delete")) OR (((gruppe2.result)="change"))
    GROUP BY gruppe1.width;

    Kann das jemand nach XSL übersetzen?

    bydey

    --
    -- noch immer ein erfolgloser <DIV> Jünger --
    1. Hallo,

      Kann das jemand nach XSL übersetzen?

      Ja, aber  erst später ;-)

      Grüße
      Thomas

      PS: ja, das war jetzt ein Chatgespräch.

      1. Hallo,

        Ja, aber  erst später ;-)

        Wäre dir sehr dankbar, vielleicht per Email!?

        Ich habe eine funktionierende Lösung.
        Die braucht aber 2-3min zur Ausführung bei 4x 350 slots in 2708 Zeilen in der XML:

        <!-- Comment: template added to ccount deleted feeders-->
        <xsl:template name="deleted">
        <xsl:param name="mm8" />
        <xsl:param name="mm12" />
        <xsl:param name="mm16" />
        <xsl:param name="mm24" />
        <xsl:param name="mm32" />
        <xsl:param name="mm44" />
        <xsl:param name="mm56" />
        <xsl:param name="slots" />
        <xsl:param name="slot" />
        <xsl:param name="groupnumber" />
        <xsl:variable name="groupnumber2">
         <xsl:value-of select="$groupnumber - 1"/>
        </xsl:variable>

        xsl:choose
        <xsl:when test="$slot != $slots +1">

        <xsl:variable name="count8">
        xsl:choose
        <xsl:when test="//Group[GroupNumber=$groupnumber]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/Result ='Delete' and
        //Group[GroupNumber=$groupnumber2]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/TapeWidth='8'">
        1
        </xsl:when>
        xsl:otherwise0</xsl:otherwise>
        </xsl:choose>
        </xsl:variable>

        <xsl:variable name="count12">
        xsl:choose
        <xsl:when test="//Group[GroupNumber=$groupnumber]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/Result ='Delete' and
        //Group[GroupNumber=$groupnumber2]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/TapeWidth='12'">
        1
        </xsl:when>
        xsl:otherwise0</xsl:otherwise>
        </xsl:choose>
        </xsl:variable>

        <xsl:variable name="count16">
        xsl:choose
        <xsl:when test="//Group[GroupNumber=$groupnumber]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/Result ='Delete' and
        //Group[GroupNumber=$groupnumber2]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/TapeWidth='16'">
        1
        </xsl:when>
        xsl:otherwise0</xsl:otherwise>
        </xsl:choose>
        </xsl:variable>

        <xsl:variable name="count24">
        xsl:choose
        <xsl:when test="//Group[GroupNumber=$groupnumber]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/Result ='Delete' and
        //Group[GroupNumber=$groupnumber2]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/TapeWidth='24'">
        1
        </xsl:when>
        xsl:otherwise0</xsl:otherwise>
        </xsl:choose>
        </xsl:variable>

        <xsl:variable name="count32">
        xsl:choose
        <xsl:when test="//Group[GroupNumber=$groupnumber]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/Result ='Delete' and
        //Group[GroupNumber=$groupnumber2]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/TapeWidth='32'">
        1
        </xsl:when>
        xsl:otherwise0</xsl:otherwise>
        </xsl:choose>
        </xsl:variable>

        <xsl:variable name="count44">
        xsl:choose
        <xsl:when test="//Group[GroupNumber=$groupnumber]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/Result ='Delete' and
        //Group[GroupNumber=$groupnumber2]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/TapeWidth='44'">
        1
        </xsl:when>
        xsl:otherwise0</xsl:otherwise>
        </xsl:choose>
        </xsl:variable>

        <xsl:variable name="count56">
        xsl:choose
        <xsl:when test="//Group[GroupNumber=$groupnumber]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/Result ='Delete' and
        //Group[GroupNumber=$groupnumber2]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/TapeWidth='56'">
        1
        </xsl:when>
        xsl:otherwise0</xsl:otherwise>
        </xsl:choose>
        </xsl:variable>

        <xsl:call-template name="deleted">
        <xsl:with-param name="mm8" select="$mm8 + $count8" />
        <xsl:with-param name="mm12" select="$mm12 + $count12" />
        <xsl:with-param name="mm16" select="$mm16 + $count16" />
        <xsl:with-param name="mm24" select="$mm24 + $count24" />
        <xsl:with-param name="mm32" select="$mm32 + $count32" />
        <xsl:with-param name="mm44" select="$mm44 + $count44" />
        <xsl:with-param name="mm56" select="$mm56 + $count56" />
        <xsl:with-param name="slots" select="$slots" />
        <xsl:with-param name="slot" select="$slot + 1" />
        <xsl:with-param name="groupnumber" select="$groupnumber" />
        </xsl:call-template>

        </xsl:when>
        xsl:otherwise
         <tr>
         <td>!!<xsl:value-of select="$mm8"/></td>
         <td><xsl:value-of select="$mm12"/></td>
         <td><xsl:value-of select="$mm16"/></td>
         <td><xsl:value-of select="$mm24"/></td>
         <td><xsl:value-of select="$mm32"/></td>
         <td><xsl:value-of select="$mm44"/></td>
         <td><xsl:value-of select="$mm56"/></td>
        </tr>
        </xsl:otherwise>
        </xsl:choose>

        </xsl:template>

        Mein Problem ist irgendwie das innerjoin zwischen den slots (= Position in XML). Daher gehe ich über die position() und addiere sowohl die position() als auch meinen count via with-param nach oben.
        Wirklich unelegannt!?

        Vielleicht eine Idee wie ich hier die Performance verbessere

        bydey

        --
        -- noch immer ein erfolgloser <DIV> Jünger --
        1. Hallo,

          Ich habe eine funktionierende Lösung.
          Die braucht aber 2-3min zur Ausführung bei 4x 350 slots in 2708 Zeilen in der XML:

          <xsl:when test="//Group[GroupNumber=$groupnumber]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/Result ='Delete' and
          //Group[GroupNumber=$groupnumber2]/JobList/LineItemList/LineItem/FeederItemList/FeederItem[position()=$slot]/TapeWidth='8'">
          1
          </xsl:when>

          Das XML ist ein wenig anderes als im Ausgangsposting. Kannst du das XML noch ergänzen?

          <Group>
          <GroupNumber>x</GroupNumber>
          <JobList>
            <LineItemList>
               <LineItem>
                  <FeederItemList>
                     <FeederItem>
                        <Result>Delete</Result>
                     </FeederItem>
                  </FeederItemList>
               </LineItem>
            </LineItemList>
          </JobList>
          </Group>

          Grüße
          Thomas