SQL错误子查询返回的值超过1

时间:2016-03-17 09:06:50

标签: sql sql-server tsql

更改PlanningDate期间时出现以下错误。因为一个PlanningTime有多个“ProgrammeTitle,Title”。我尝试将其更改为加入,但无法获得我期望的结果。请帮忙

  

Msg 512,Level 16,State 1,Line 1 Subquery返回的值超过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'

2 个答案:

答案 0 :(得分:0)

很明显,您的子查询会返回多个值,因此您无法以这种方式查询结果。您必须找到一些其他方法来根据您的表结构查询结果。只要认为查询中的任何一个子查询都会返回多个结果,您的选择将如何工作?而已。

答案 1 :(得分: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';

这将消除您的错误。但是,我猜测结果并不完全符合您的要求。你的问题没有说明你想要的东西,所以这应该让你走上更好的道路。

注意:使用日期/时间时,应使用内置日期/时间功能。您正在将它们转换为字符串,这简直是一个坏主意。您不需要这样做,而且会影响性​​能。