这是我的问题:
SELECT [Data] from usrrpt.Expansion EX WHERE EX.Order_PK = '231503796' AND EX.FieldName_PK like 'SHIPCOMMENT%' 返回的数据如下:
数据:
5 PLTS(STC: 20 CTNS)DIM:80X71X155CM@122KG
80X71X120CM@95KG X2, 80X71X120CM@96KG X4, 80X71X107CM@76KG
80X71X109CM@86KG X 7如何获得权重的总和(122 + 95 * 2 + 96 * 4 + 76 + 86 * 7)?
发布于 2020-06-16 17:49:57
这在SQL中比在SSRS中更容易实现。这在SSRS中是完全可以做到的,但是表达式会变得混乱。通常最好的做法是在服务器上完成数据方面的工作,并且在可能的情况下只在报告中完成表示。
我就是这么做的。
它依赖于以下假设。
我做的第一件事是重新创建数据,然后编写一个子查询,以数字形式提取权重和乘数值,然后将其包装在另一个查询中,该查询执行简单的计算,以证明我们有可用的数据可用。
DECLARE @t TABLE([Data] varchar(1000))
INSERT INTO @t VALUES
('5 PLTS(STC: 20 CTNS)DIM:80X71X155CM@122KG'),
('80X71X120CM@95KG X2'),
('80X71X120CM@96KG X4'),
('80X71X107CM@76KG'),
('80X71X109CM@86KG X 7')
SELECT *, WeightKG * Multi as TotalWeight
FROM (
SELECT
*
, WeightKG = CAST(SUBSTRING(
[Data] ,
CHARINDEX('@', [Data]) +1 ,
CHARINDEX('KG', [Data], CHARINDEX('@', [Data])) - CHARINDEX('@', [Data]) - 1
)
as Float)
, Multi = CAST(
CASE CHARINDEX('X', [Data], CHARINDEX('KG', [Data]))
WHEN 0 THEN 1
ELSE LTRIM(RTRIM(
SUBSTRING(
[Data] ,
CHARINDEX('X', [Data], CHARINDEX('KG', [Data])) + 1,
LEN([Data]) - CHARINDEX('X', [Data], CHARINDEX('KG', [Data])) + 1
)
))
END
AS Float)
FROM @t
) x如果运行此查询,您将获得以下结果。

https://stackoverflow.com/questions/62404961
复制相似问题