【问题标题】:Trying to write a SELECT statement but keep getting can't convert to int error尝试编写 SELECT 语句但不断出现无法转换为 int 错误
【发布时间】:2014-11-07 16:14:13
【问题描述】:

我是 SQL 编码的新手,我正在努力解决我在数据库课程中遇到的问题。

我不想要答案!我只需要被推向正确的方向。 以下是我正在努力解决的问题。

编写一个 SELECT 语句,为包含这些列的产品的每个类别返回一行: Categories 表中的 CategoryName 列 Products 表中的产品数量 Products 表中最贵产品的标价 对结果集进行排序,使产品最多的类别首先出现。

这是我目前所拥有的:

     SELECT C.CategoryName, P.CategoryID, COUNT(*) Products, MAX(P.ListPrice)
     FROM Categories C, Products P
     WHERE C.CategoryName=P.CategoryID
     GROUP BY C.CategoryName,P.CategoryID ORDER BY COUNT(*) desc;

每次我运行 SELECT 查询时,我都会收到此错误:

     Msg 245, Level 16, State 1, Line 1
     Conversion failed when converting the varchar value 'Basses' to data type int.

任何帮助将不胜感激! 谢谢!

-------------更新-----------更新-------- --------------

嘿,大家只是想知道,在大家的帮助下,我终于弄明白了。

这是最终结果。

    SELECT C.CategoryName,COUNT(P.CategoryID) AS NumberOfProducts, MAX(P.ListPrice) AS
    MostExpensiveProduct
    FROM Categories C, Products P
    WHERE P.CategoryID=C.CategoryID
    GROUP BY C.CategoryName ORDER BY COUNT(*) desc;

【问题讨论】:

  • 而不是数字 - 您的列 ListPrice 的某处是否有值 Basses
  • This:WHERE C.CategoryName=P.CategoryID看起来有点可疑,很可能是转换错误的根源。猜应该是WHERE C.ID=P.CategoryID
  • @jpw 这实际上是有道理的,因为它的输出抱怨从 VARCHAR 转换为 int
  • 您应该使用 ANSI-92 样式的连接,而不是您在此处使用的旧样式。
  • @juergend 是的,Basses 来自CategoryName 列。

标签: sql sql-server


【解决方案1】:

很可能是因为您试图将 C.CategoryName(很可能是 VARCHAR 类型)与 P.CategoryID(可能是 INT)进行比较

确保在加入表格时使用正确的相关字段。

【讨论】:

    【解决方案2】:

    我认为您正在将 varchar (categoryname) 与 int (categoryid) 进行比较,在使用 where 条件时将 varchar 的类型更改为 int 或在使用 where 条件时使用相同数据类型的列

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-21
      • 2016-10-30
      • 1970-01-01
      • 2016-10-27
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多