У меня есть файл сотрудников, которые получают разные виды заработка за период оплаты.У каждого сотрудника может быть от 1 до 3 различных типов флагов заработка (A, B, C), и эти доходы могут приходиться на разные даты.
Для каждого сотрудника я хотел бы суммировать суммы вместе, если запись имееттот же флаг заработка и дата.Если нет, скажем, заработка B, то в месте B должно быть 0.
Я бы хотел, чтобы выходные данные были в одной строке, если это возможно, чтобы сделать читабельность и проверку проще.Это часть, с которой у меня проблемы.
Я сгруппирован по EmployeeID, EarningFlag и Date.Затем я суммировал суммы для каждой группировки.Вывод идет по отдельным строкам и является беспорядком.Я понятия не имею, как поставить ноль на место, если в этот день для работника нет такого флага заработка.
Пример XML:
<Entry>
<EmployeeName>Bob Stevens</EmployeeName>
<EmployeeID>123</EmployeeID>
<EarningFlag>A</EarningFlag>
<Date>2019-04-01</Date>
<Amount>2031.54</Amount>
</Entry>
<Entry>
<EmployeeName>Bob Stevens</EmployeeName>
<EmployeeID>123</EmployeeID>
<EarningFlag>A</EarningFlag>
<Date>2019-04-01</Date>
<Amount>30.74</Amount>
</Entry>
<Entry>
<EmployeeName>Bob Stevens</EmployeeName>
<EmployeeID>123</EmployeeID>
<EarningFlag>B</EarningFlag>
<Date>2019-04-01</Date>
<Amount>1.63</Amount>
</Entry>
<Entry>
<EmployeeName>Samantha Philips</EmployeeName>
<EmployeeID>036</EmployeeID>
<EarningFlag>C</EarningFlag>
<Date>2019-04-01</Date>
<Amount>631.54</Amount>
</Entry>
<Entry>
<EmployeeName>Samantha Philips</EmployeeName>
<EmployeeID>036</EmployeeID>
<EarningFlag>C</EarningFlag>
<Date>2019-04-01</Date>
<Amount>3771.33</Amount>
</Entry>
<Entry>
<EmployeeName>Samantha Philips</EmployeeName>
<EmployeeID>036</EmployeeID>
<EarningFlag>A</EarningFlag>
<Date>2019-04-01</Date>
<Amount>631.54</Amount>
</Entry>
<Entry>
<EmployeeName>Samantha Philips</EmployeeName>
<EmployeeID>036</EmployeeID>
<EarningFlag>B</EarningFlag>
<Date>2019-03-07</Date>
<Amount>3771.33</Amount>
</Entry>
<xsl:for-each-group select="Entry" group-by="concat(EmployeeID,Date,EarningFlag)">
<xsl:sort select="current-grouping-key()"/>
<xsl:value-of select="EmployeeID"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="EmployeeName"/>
<xsl:text>,</xsl:text>
<xsl:value-of select="Date"/>
<xsl:text>,</xsl:text>
<xsl:if test="EarningFlag='A'">
<xsl:value-of select="sum(current-group()/Amount)"/>
</xsl:if>
<xsl:text>,</xsl:text>
<xsl:if test="EarningFlag='B'">
<xsl:value-of select="sum(current-group()/Amount)"/>
</xsl:if>
<xsl:text>,</xsl:text>
<xsl:if test="EarningFlag='C'">
<xsl:value-of select="sum(current-group()/Amount)"/>
</xsl:if>
</xsl:for-each-group>
My actual results are:
123,Bob Stevens,2019-04-04,2062.28123,Bob Stevens,2019-04-04,1.63,
036,Samantha Philips,2019-03-07,3771.33,
036,Samantha Philips,2019-04-01,631.54,036,Samantha Philips,2019-04-01,3771.33
The expected output would be in the order of Employee ID, Employee Name, Date, A, B, C.
123,Bob Stevens,2019-04-01,2062.28,1.63,0
036,Samantha Philips,2019-03-07,0,3771.33,0
036,Samantha Philips,2019-04-01,631.54,0,3771.33
Is this even possible???
Thank you for any help.