首页 > 解决方案 > 获得 Top 10 产品的结果

问题描述

我想返回特定产品组(特定部门前 10 名产品)的结果(单位、现金、价格、成本等)。

我在下面编写的代码列出了 WHERE 子句末尾的前 10 个代码,但不返回结果——它只返回列标题,但没有数据?

如果我从末尾的 es.ClientProductID 数字(前 10 个)中删除“N”和逗号,则会收到以下错误消息:“将 nvarchar 转换为数字数据类型的算术溢出错误。” (es.ClientProductID 是一个 nvarchar 数据类型)。

Sales 是 INT 数据类型,Price 是 DECIMAL 数据类型。

请问有谁知道如何解决这个问题?如果是这样,你能修改下面的代码吗?提前致谢。

    select
    es.ClientProductID,
    es.ProductName,
    ash.sales,
    ash.sales * ash.price as CashSales, 
    ash.price,
    ash.cost,
    ash.date  
from AggregatedSalesHistory as ash
join v_EnterpriseStructure as es on es.ProductSID = ash.ProductSID
join PriceZone as pz on pz.PriceZoneID = ash.PriceZoneID 

where 
    es.DepartmentName = 'Dairy' 
    and ash.segmentid = 0
    and pz.Name = 'South' 
    and ash.date >= '2014-1-1' and ash.Date<='2014-12-24'
    and es.ClientProductID IN (N'7119508806', N'7119502372', N'7003836538', N'7119502437', N'2500002694', N'2500002606', N'7003836540', N'2500005433', N'2500005542', N'2500002893')

标签: ssms-2014

解决方案


一个产品不能同时有两个 ID。or您应该在所有产品 ID 之间使用运算符。或者更好的是,使用in作为一系列ors 的简写的运算符:

and es.ClientProductID IN (7119508806, 7119502372, 7003836538, 7119502437, 2500002694, 2500002606, 7003836540, 2500005433, 2500005542, 2500002893)

编辑:

根据评论ClientProductID是一nvarchar列,因此您应该在的参数列表中使用nvarchar文字,而不是整数文字:in

and es.ClientProductID IN (N'7119508806', N'7119502372', N'7003836538', N'7119502437', N'2500002694', N'2500002606', N'7003836540', N'2500005433', N'2500005542', N'2500002893')

推荐阅读