2016-03-17 2 views
0

При изменении периода планирования я получил следующую ошибку. Из-за одного параметра PlanningTime имеется более одного «ProgrammeTitle, Title». Я попытался изменить его как соединение, но не могу получить ожидаемый результат. Пожалуйста, помогитеОшибка SQL Подзапрос возвращал более 1 значения

Msg 512, уровень 16, состояние 1, строка 1 Подзапрос возвращен более чем 1 значение. Это недопустимо, когда подзапрос следует =,! =, <, < =, >,> = или когда подзапрос используется как выражение.

select pt.PlanningTime, 
     (SELECT (LTRIM(RTRIM(ProgrammeTitle+':'+Title))) 
     FROM Planning 
     where ChannelID = '34' 
     and CONVERT(char(8),PlanningDate,112) between '20130101' and '20130107' 
     and pt.PlanningTime = PlanningTime 
     and DATEPART(dw,PlanningDate)=1) AS Title1, 
     (SELECT (LTRIM(RTRIM(ProgrammeTitle+':'+Title))) 
     FROM Planning 
     where ChannelID = '34' 
      and CONVERT(char(8),PlanningDate,112) between '20130101' and '20130107' 
      and pt.PlanningTime = PlanningTime 
      and DATEPART(dw,PlanningDate)=2) AS Title2 
FROM PlanningTime pt 
where pt.ChannelID = '34' 
    and CONVERT(char(8),pt.PlanningDate,112) between '20130101' and '20130107' 
+0

Просим обратить внимание на продукт dbms. (Некоторые не ANSI SQL там ...) – jarlh

+0

Один или оба подвыбора возвращают более 1 строки. Либо коррелируйте (включая условие с таблицей внешнего уровня), либо вместо этого присоединяйте. – jarlh

+0

Я добавил тег SQL Server, потому что синтаксис похож на SQL Server. –

ответ

0

Очевидно, что ваш суб-запрос возвращает более одного значения, и поэтому вы не можете запросить результат исполнения таким образом. Вы должны найти другой способ запроса результатов в соответствии с вашей структурой таблицы. Просто подумайте, что любой из подзапросов в вашем запросе возвращает более одного результата, как ваш выбор будет работать? Вот и все.

+0

rinesh, можете ли вы помочь мне изменить кодировку? Пользователи хотят показать все записи в формате PlanningTime. – JKMK

+0

. Вы можете использовать Joins для объединения таблиц «Planning» и «PlanningTime» в «ChannelID». Это просто и прямо. – rinesh

+0

rines, я попытался изменить его, чтобы использовать join, но он не смог получить результат за то, что я ожидал! Пользователи хотят показать все записи, которые они ввели! Кодирование Я показал, что это часть кодирования, пользователи хотят показать дату в столбце и времени в строке – JKMK

0

В SQL Server, вы можете получить все строки с помощью outer apply:

SELECT pt.PlanningTime, p1.Title1, p2.Title2 
FROM PlanningTime pt OUTER APPLY 
    (SELECT (LTRIM(RTRIM(ProgrammeTitle+':'+Title))) 
     FROM Planning 
     WHERE ChannelID = '34' and 
      CONVERT(char(8),PlanningDate,112) between '20130101' and '20130107' and 
      pt.PlanningTime = PlanningTime and 
      DATEPART(dw, PlanningDate) = 1 
    ) p1 OUTER APPLY 
    (SELECT (LTRIM(RTRIM(ProgrammeTitle+':'+Title))) 
     FROM Planning 
     WHERE ChannelID = '34' AND 
      CONVERT(char(8),PlanningDate,112) between '20130101' and '20130107' 
      pt.PlanningTime = PlanningTime and 
      DATEPART(dw,PlanningDate)=2 
    ) p2 
where pt.ChannelID = '34' and 
     CONVERT(char(8),pt.PlanningDate,112) between '20130101' and '20130107'; 

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

Примечание: вы должны использовать встроенные функции даты и времени при работе с датой/временем. Вы конвертируете их в строки, что является просто плохой идеей. Вам не нужно это делать, и это влияет на производительность.

+0

Gordon. Это пример кода, который легко подготовить и понять. Мое программирование определяет время ввода входных параметров. Ваше измененное кодирование не может показать результат, который я ожидал! Он показывает много записей дублирования, даже если я использую DISTINCT. И некоторые названия показывают неправильную колонку. Пользователи, которым нужно показать дату в столбце & Время в строке. Некоторые поля должны быть BLANK из-за некоторого периода времени не имеют записи. Я пытаюсь использовать внутреннее соединение, оно также показывает неправильный результат. – JKMK

Смежные вопросы