Abfrage mit Anspruch
dey
- xsl
0 dey0 Thomas J.S.0 dey
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
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
Hallo,
Kann das jemand nach XSL übersetzen?
Ja, aber erst später ;-)
Grüße
Thomas
PS: ja, das war jetzt ein Chatgespräch.
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
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