将数据类型nvarchar转换为数字转换/强制转换时出错

doinxwow  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(394)

我怀疑这和报道有关 ClientName ,这是一个 nvarchar 数据类型。 AUMidnchar . 我不知道如何在不改变数据类型的情况下解决这个问题(我不喜欢这样)。

SELECT 
    Clients.ClientName, AUM.ManagementFee, 
    SUM(AUM.ManagementFee * AUM.AUM) AS Management_Fee
FROM
    AUM
JOIN 
    Clients ON AUM.AUMid = Clients.AUMid
GROUP BY 
   Clients.ClientName, AUM.ManagementFee

我需要展示 Clients.ClientName . 它与 AUM 表via AUM.AUMid .

CREATE TABLE Clients 
(
    ClientID nvarchar(50),
    ClientName nvarchar(50)
    AccountID nchar(10),
    AUMid nchar(10)
);

CREATE TABLE AUM
(
    AUMid nchar(10),
    AUM nvarchar(max),
    ManagementFee(decimal(9,4)
);

正在删除 SUM(AUM.AUM * AUM.ManagementFee) AS Management_Fee 允许执行查询。

jljoyd4f

jljoyd4f1#

这显然是导致您的错误的原因:

SUM(AUM.ManagementFee * AUM.AUM) AS Management_Fee

因为 AUM.AUM 是字符串。如果您想存储一个数字,那么这似乎是一个非常糟糕的数据类型选择。然而,我怀疑你真的只想要一个直接的和:

SELECT c.ClientName, 
       SUM(a.ManagementFee) AS Management_Fee
FROM Clients c JOIN
     AUM a
     ON a.AUMid = c.AUMid
GROUP BY c.ClientName;

另一方面,问题可能是 AUM 是以逗号分隔的数字列表。如果是这样的话,我的第一个也是最真诚的建议就是修复数据模型。如果由于某种原因不能这样做,您可以解析字符串并祈祷它能正常工作:

SELECT c.ClientName, 
       SUM(a.ManagementFee * TRY_CONVERT(NUMERIC(38, 6), s.value)) AS Management_Fee
FROM Clients c JOIN
     AUM a
     ON a.AUMid = c.AUMid CROSS APPLY
     string_split(a.aum, ',') s
GROUP BY c.ClientName;

相关问题