【发布时间】: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