Получение результатов для 10 лучших продуктов - PullRequest
0 голосов
/ 14 сентября 2018

Я хотел бы вернуть результаты (единицы, наличные, цена, стоимость и т. Д.) Для определенной группы продуктов (10 лучших продуктов в конкретном отделе).

В коде, который я написал ниже, перечислены 10 лучших в конце предложения WHERE, но он не возвращает результатов - он просто возвращает заголовки столбцов, но без данных ??

Если я удаляю «N» и кавычки из цифр es.ClientProductID в конце (первые 10), я получаю следующее сообщение об ошибке: «Ошибка арифметического переполнения при преобразовании 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')

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018

Вместо этого вы можете использовать IN. Это будет проверять значение ClientProductID для всех продуктов в скобках и возвращать каждый из них, если запрос сопоставляет его с одним из значений.

Выписка ниже:

and es.ClientProductID IN (7119508806, 7119502372, 7003836538, 7119502437, 
2500002694, 2500002606, 7003836540, 2500005433, 2500005542, 2500002893)
0 голосов
/ 14 сентября 2018

вы почти близки,

ash.date >= '2014-1-1' and ash.Date<='2014-12-24'
and (es.ClientProductID = 7119508806
or es.ClientProductID = 7119502372
or es.ClientProductID = 7003836538
or es.ClientProductID = 7119502437
or es.ClientProductID = 2500002694
or es.ClientProductID = 2500002606
or es.ClientProductID = 7003836540
or es.ClientProductID = 2500005433
or es.ClientProductID = 2500005542
or es.ClientProductID = 2500002893)

and условие говорит о том, что ClientProductID должно иметь эти 10 идентификаторов одновременно.Принимая во внимание, что or определяет, что любой из этих идентификаторов равен ClientProductID одновременно.Использование (), поэтому все случаи рассматриваются как Единица успеха.

0 голосов
/ 14 сентября 2018

Продукт не может иметь два идентификатора одновременно.Вы должны использовать оператор or между всеми идентификаторами продукта.Или еще лучше, используйте оператор in, который является сокращением для серии or s:

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

РЕДАКТИРОВАТЬ:

Согласно комментариям ClientProductID - это столбец nvarchar, поэтому в списке аргументов in следует использовать литералы nvarchar, а не целые литералы:

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