Way*_*ina 1 sql xslt sql-server-2005
我正在使用一个相当毛茸茸的Stored Proc来返回XML(XML用样式表转换并打印到页面;本质上是XML格式的GridView).我有聚集多个行(具有相同的ID,当然)的要求成单个行仅当一特定列的值不是两个特定值(在这种情况下,列不聚集的)中的一个.
实际上我需要做以下(在伪代码中):
select quoteID, customerName, shippingCharges, description, /*other columns*/
from quotes q
inner join customers c on q.customerID = c.customerID
where shipDate between @fromDate and @toDate
for xml explicit
if description != "Insurance" and description != "Pickup":
/*aggregate the rows for that quoteID into one single row
adding together charges and the like as needed*/
else:
/*nothing - okay to have multiple rows*/
Run Code Online (Sandbox Code Playgroud)
我该如何处理这种逻辑呢?我的第一个猜测是将所有值放入临时表(或CTE),然后以某种方式检查所有数据以查看是否需要提取和组合行,但我正在绘制一个空白,以确定如何实际完成,这通常是一个指标,这不是正确的做法...
相反,这会在XSL转换文件中做得更好(也许更容易吗?)吗?我的选择仅限于三种选择:
编辑
一个我所面临的问题是,记录通常具有相同的ID字段,因此总计是走出来不正确,因为我总结整个记录(其计算总的我想外地和外地,我不想要).
例如,记录可能是这样的:
1234 Insurance 54.65
1234 Shipping Charge 160.00
1234 Some Other Charge 15.00
Run Code Online (Sandbox Code Playgroud)
我希望完成的结果是这样的:
1234 Shipment 175.00
1234 Insurance 54.65
Run Code Online (Sandbox Code Playgroud)
发生了什么事:
1234 Shipment 229.65
1234 Insurance 229.65
Run Code Online (Sandbox Code Playgroud)
它正在抛弃总数.
我使用的策略是创建一个名为"AggregateData"的CTE,它按ID和描述汇总各种金额和组; 这是失败的,因为它给出了上述结果(每个描述的总和,因此值出现两次并在报告上添加两次).我得到的最接近的是不按描述对其进行分组,而是将其包装在Max
函数中(是的,我知道这不是一个好主意).这给了我正确的总数,但描述没有准确反映,例如一些记录应该是"保险",而是显示"发货".
最简单的方法是编写两个查询并将结果联合起来
select <columns>
where description not in('Insurance','Pickup')
group by <some columns)
union all
select <columns>
where description in('Insurance','Pickup')
Run Code Online (Sandbox Code Playgroud)