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

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

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

  1. SELECT
  2. Clients.ClientName, AUM.ManagementFee,
  3. SUM(AUM.ManagementFee * AUM.AUM) AS Management_Fee
  4. FROM
  5. AUM
  6. JOIN
  7. Clients ON AUM.AUMid = Clients.AUMid
  8. GROUP BY
  9. Clients.ClientName, AUM.ManagementFee

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

  1. CREATE TABLE Clients
  2. (
  3. ClientID nvarchar(50),
  4. ClientName nvarchar(50)
  5. AccountID nchar(10),
  6. AUMid nchar(10)
  7. );
  8. CREATE TABLE AUM
  9. (
  10. AUMid nchar(10),
  11. AUM nvarchar(max),
  12. ManagementFee(decimal(9,4)
  13. );

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

jljoyd4f

jljoyd4f1#

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

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

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

  1. SELECT c.ClientName,
  2. SUM(a.ManagementFee) AS Management_Fee
  3. FROM Clients c JOIN
  4. AUM a
  5. ON a.AUMid = c.AUMid
  6. GROUP BY c.ClientName;

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

  1. SELECT c.ClientName,
  2. SUM(a.ManagementFee * TRY_CONVERT(NUMERIC(38, 6), s.value)) AS Management_Fee
  3. FROM Clients c JOIN
  4. AUM a
  5. ON a.AUMid = c.AUMid CROSS APPLY
  6. string_split(a.aum, ',') s
  7. GROUP BY c.ClientName;
展开查看全部

相关问题