Sql server 计算总和并作为行插入
使用SSI,我将在输出中引入包含以下内容的原始文本文件: 我稍后会使用这些数据来报告。关键列将被旋转。但是,我不想单独显示所有这些列,我只想显示总数。 为了实现这一点,我的想法是使用触发器计算插入时的总和,然后将总和作为新行插入数据 输出将类似于:Sql server 计算总和并作为行插入,sql-server,ssis,etl,Sql Server,Ssis,Etl,使用SSI,我将在输出中引入包含以下内容的原始文本文件: 我稍后会使用这些数据来报告。关键列将被旋转。但是,我不想单独显示所有这些列,我只想显示总数。 为了实现这一点,我的想法是使用触发器计算插入时的总和,然后将总和作为新行插入数据 输出将类似于: 我想做的事可能吗?是否有更好的方法在pivot上动态执行此操作?要明确的是,我不只是为报表旋转这些行,还有其他行不需要计算总和 我将向您展示一种方法,但我不建议将总计添加到详细数据的末尾。如果你要报告它,就把它作为一个总数显示出来 在源添加数据转
我想做的事可能吗?是否有更好的方法在pivot上动态执行此操作?要明确的是,我不只是为报表旋转这些行,还有其他行不需要计算总和 我将向您展示一种方法,但我不建议将总计添加到详细数据的末尾。如果你要报告它,就把它作为一个总数显示出来 在源添加数据转换后: C#
string[] splits = Row.value.ToString().Split(' '); //Make sure single quote for char
int goodValue;
if(Int32.TryParse(splits[0], out goodValue))
{
Row.Size = goodValue;
Row.Type = "GB";
}
else
{
Row.Size = 0;
Row.Type="None";
}
现在,您的表中有了具有适当数据类型的数据来执行算术运算
如果你真的想要你的格式的数据。添加多播、聚合和总和(大小),然后合并回原始流。使用派生列和脚本组件
您可以通过以下步骤实现这一点:
intValue
):
(DT_I4)(RIGHT([Value],2) == "GB" ? SUBSTRING([Value],1,FINDSTRING( [Value], " ", 1)) : "0")
因此,如果值以GB
结尾,则取数字,否则结果为0
SynchronousInput
属性设置为None
outKey
,outValue
我可以用另一种方法解决我的问题 我使用了以下代码:
INSERT INTO [Table] (
[Filename]
, [Type]
, [DeviceSN]
, [Property]
, [Value]
)
SELECT ms.[Filename],
ms.[Type],
ms.[DeviceSN],
'Memory Device.Total' AS [Key],
CAST(SUM(CAST(left(ms.[Value], 2) as INT)) AS VARCHAR) + ' GB' as 'Value'
FROM [Table] ms
JOIN inserted i ON i.Row# = ms.Row#
WHERE ms.[Value] like '%GB'
GROUP BY ms.[filename],
ms.[type],
ms.[devicesn]
我认为使用脚本组件比添加多播、聚合和合并更容易更快地实现这一点,请查看我的答案。我再次使用VB.NET:)我需要在报告中这样做,因为列是动态旋转的,这使得我很难进行计算。我甚至不推荐摘要,而是在报告中包含详细信息,然后在报告中进行汇总。什么意思包含详细信息?你不推荐摘要是什么意思?你能举个例子吗?我有3列存储在db中。每行的设备名称、大小和类型。然后,我会创建一个显示该信息的报告,然后在末尾加上一个总和size.Hi。为什么你认为这与正常化有关?还有,你能做什么?PS谢谢。仅为方便补充文本和/或为文本中无法给出的内容使用图像。另请参见。您是正确的。规范化不应该是这里的标记。我列出了我目前能够做的事情和需要做的事情。我没有看到任何问题,我张贴一个图像在这里提供一个例子。
INSERT INTO [Table] (
[Filename]
, [Type]
, [DeviceSN]
, [Property]
, [Value]
)
SELECT ms.[Filename],
ms.[Type],
ms.[DeviceSN],
'Memory Device.Total' AS [Key],
CAST(SUM(CAST(left(ms.[Value], 2) as INT)) AS VARCHAR) + ' GB' as 'Value'
FROM [Table] ms
JOIN inserted i ON i.Row# = ms.Row#
WHERE ms.[Value] like '%GB'
GROUP BY ms.[filename],
ms.[type],
ms.[devicesn]