2012中的权重和倍数

zwghvu4y  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(337)

我的问题是:

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 )?

c86crjj0

c86crjj01#

这在sql中比在ssrs中更容易实现。在ssrs中这样做是完全可能的,但是表达式会变得混乱。通常,在服务器上处理数据方面的事情是一种很好的做法,在可能的情况下,只在报表中进行表示。
我就是这样做的。
它依赖于以下假设。
重量总是在第一个“@”和下一个“kg”之间
乘数总是在权重之后,前面是x
如果在“kg”之后找不到“x”,则乘数为1
我做的第一件事是重新创建您的数据,然后我编写了一个子查询,将权重和乘数值提取为数字,然后将其 Package 在另一个查询中,该查询进行简单的计算,以证明我们有可用的数据可以处理。

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

如果运行此查询,将得到以下结果。

相关问题