У меня есть таблица с несколькими факторами инфляции из разных исследований, и я хочу добавить конкретные факторы в качестве еще одного столбца в таблице с данными о продажах.
Я получаю следующую ошибку:
Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.
Вот пример:
dbo.Inflation
ID Group Year Factor
1 Dog 2010 1.00
1 Dog 2011 1.01
1 Dog 2012 1.02
1 Cat 2010 2.00
1 Cat 2011 2.10
1 Cat 2012 2.20
2 Dog 2010 1.05
2 Dog 2011 1.04
2 Dog 2012 1.03
2 Cat 2010 2.50
2 Cat 2011 2.40
2 Cat 2012 2.30
dbo.Sales
SalesID Year DogSales CatSales TotalSales
1 2010 50,000 25,000 75,000
2 2010 10,000 15,000 25,000
3 2011 75,000 50,000 125,000
4 2012 12,000 10,000 22,000
5 2012 40,000 15,000 55,000
6 2012 40,000 30,000 70,000
Я хочу вернуть Факторы инфляции в моей таблице продаж для собак и кошек из идентификатора, который я указал. Поэтому, если бы я хотел использовать факторы ID 1 для фактора Собаки и факторы ID 2 для фактора Ката, результаты были бы такими:
SalesID Year DogSales CatSales TotalSales Dog_ Cat_
Factor Factor
1 2010 50,000 25,000 75,000 1.00 2.50
2 2010 10,000 15,000 25,000 1.00 2.50
3 2011 75,000 50,000 125,000 1.01 2.40
4 2012 12,000 10,000 22,000 1.02 2.30
5 2012 40,000 15,000 55,000 1.02 2.30
6 2012 40,000 30,000 70,000 1.02 2.30
Я пытаюсь использовать подзапрос с внутренним объединением, чтобы создать это новое поле, в котором по-прежнему происходит ошибка.
Select distinct
Sales.SalesID
,Sales.Year
,Sales.DogSales
,Sales.CatSales
,Sales.TotalSales
,(SELECT Inflation.Factor from dbo.Inflation INNER JOIN dbo.Sales on Inflation.Year = Sales.Year where Inflation.ID = 1 and Inflation.Group = 'Dog') as Dog_Factor
,(SELECT Inflation.Factor from dbo.Inflation INNER JOIN dbo.Sales on Inflation.Year = Sales.Year where Inflation.ID = 2 and Inflation.Group = 'Cat') as Cat_Factor
FROM dbo.Sales
Это дает мне ошибку при возврате более чем одного значения, несмотря на то, что только группа факторов, к которым я хочу присоединиться, отображается в результатах таблицы инфляции, когда я использую те же критерии в предложении where. Кроме того, когда я обновляю свои подзапросы на SELECT TOP 1 вместо просто SELECT, таблица возвращает факторы из правильного соответствующего ID инфляции и группы, но только из года 2010 для каждой строки, как если бы она не распознавала мои критерии JOIN, см. Ниже:
SalesID Year DogSales CatSales TotalSales Dog_ Cat_
Factor Factor
1 2010 50,000 25,000 75,000 1.00 2.50
2 2010 10,000 15,000 25,000 1.00 2.50
3 2011 75,000 50,000 125,000 1.00 2.50
4 2012 12,000 10,000 22,000 1.00 2.50
5 2012 40,000 15,000 55,000 1.00 2.50
6 2012 40,000 30,000 70,000 1.00 2.50
Я хочу иметь возможность переключаться между идентификаторами и группами по мере необходимости, но в качестве ключа, соединяющего две таблицы, укажите год.
Примечание. Я также пытался повторить оператор объединения, присоединяющийся к Году после моего оператора FROM, но я получил ту же ошибку в отношении слишком большого количества результатов. Я также попробовал внешнее применение и получил то же самое.
Любая помощь здесь будет принята с благодарностью!