Если у вас возникла такая ошибка, вы должны сначала понять , почему вы получаете более одного значения и имеете ли деловые правила, что вам нужно показать все из них, или, если у вас должен быть только один, то что бизнес-правило, вам нужно использовать, чтобы ограничить его только одним. Это не то, что вы можете делать волей-неволей.Вам нужно понять данные, чтобы понять, что вы должны сделать, чтобы исправить это. Все следующие фрагменты кода, в зависимости от фактических данных, может устранить ошибку, только один может дать правильный ответ:
Комплектование наибольшее значение
SELECT F_Asset_Code, F_Unit_Price, (select top 1 F_SLM_Years from T_L1Category
where F_L1Cat_Code=T_Assets.F_L1Cat_Code order by F_SLM_Years desc) as F_SLM_Years, F_ServiceStart
FROM T_Assets
where F_ServiceStart <= '2016-10-31' and F_ServiceStart<>'1900-01-01'
and F_Asset_CurrentValue <> '0.00' or F_Asset_CurrentValue is null
Комплектование наименьшее значение
SELECT F_Asset_Code, F_Unit_Price, (select MIN(F_SLM_Years) from T_L1Category
where F_L1Cat_Code=T_Assets.F_L1Cat_Code) as F_SLM_Years, F_ServiceStart
FROM T_Assets
where F_ServiceStart <= '2016-10-31' and F_ServiceStart<>'1900-01-01'
and F_Asset_CurrentValue <> '0.00' or F_Asset_CurrentValue is null
Агрегирование значения
SELECT F_Asset_Code, F_Unit_Price, (select SUM(F_SLM_Years) from T_L1Category
where F_L1Cat_Code=T_Assets.F_L1Cat_Code) as F_SLM_Years, F_ServiceStart
FROM T_Assets
where F_ServiceStart <= '2016-10-31' and F_ServiceStart<>'1900-01-01'
and F_Asset_CurrentValue <> '0.00' or F_Asset_CurrentValue is null
Сбор одну базовую величину d на дополнительные где условия (при условии, когда условие 100% времени будет возвращать только 1 значение!)
SELECT F_Asset_Code, F_Unit_Price, (select F_SLM_Years from T_L1Category
where F_L1Cat_Code=T_Assets.F_L1Cat_Code and F_L1Cat_Code= 'test') as F_SLM_Years, F_ServiceStart
FROM T_Assets
where F_ServiceStart <= '2016-10-31' and F_ServiceStart<>'1900-01-01'
and F_Asset_CurrentValue <> '0.00' or F_Asset_CurrentValue is null
Использование присоединиться, чтобы вернуть все записи
SELECT F_Asset_Code, F_Unit_Price, F_SLM_Years, F_ServiceStart
FROM T_Assets
LEFT JOIN T_L1Category
ON T_L1Category.F_L1Cat_Code=T_Assets.F_L1Cat_Code
WHERE F_ServiceStart <= '2016-10-31'
and F_ServiceStart<>'1900-01-01'
and (F_Asset_CurrentValue <> '0.00' or F_Asset_CurrentValue is null)
Использование функции вещи в объединить несколько результатов для этого одного поля в строку
select F_Asset_Code, F_Unit_Price, STUFF((SELECT ' ' + cast(F_SLM_Years as nvarchar)
FROM T_L1Category
where F_L1Cat_Code=T_Assets.F_L1Cat_Code
FOR XML PATH('')), 1, 1, ''
)
FROM T_Assets
where F_ServiceStart <= '2016-10-31' and F_ServiceStart<>'1900-01-01'
and F_Asset_CurrentValue <> '0.00' or F_Asset_CurrentValue is null
Сообщение об ошибке должно быть достаточно ясным, ваш подзапрос не может возвращать более одного значения. –
Используйте верхнюю часть 1 во внутреннем выборе. Что вы пытаетесь достичь? Топ 1 может не соответствовать вашим потребностям. –
Ошибка сама по себе F_SLM_Years из T_L1Категория, имеющая более одного значения для этого F_L1Cat_Code. – Mani