Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL错误子查询返回了多个值_Sql_Sql Server_Tsql - Fatal编程技术网

SQL错误子查询返回了多个值

SQL错误子查询返回了多个值,sql,sql-server,tsql,Sql,Sql Server,Tsql,当我更改PlanningDate期间时,出现以下错误。因为一个计划时间有不止一个“项目名称,标题”。我试图将其更改为“加入”,但无法获得预期结果。请帮忙 Msg 512,级别16,状态1,第1行子查询返回的值超过1 价值当子查询在=、!=、=或者当子查询用作表达式时 很明显,子查询返回多个值,因此不能以这种方式查询结果。您必须找到其他方法根据表结构查询结果。试想一下,查询中的任何一个子查询都会返回多个结果,select将如何工作?就这样 在SQL Server中,可以使用outer apply获

当我更改PlanningDate期间时,出现以下错误。因为一个计划时间有不止一个“项目名称,标题”。我试图将其更改为“加入”,但无法获得预期结果。请帮忙

Msg 512,级别16,状态1,第1行子查询返回的值超过1 价值当子查询在=、!=、=或者当子查询用作表达式时


很明显,子查询返回多个值,因此不能以这种方式查询结果。您必须找到其他方法根据表结构查询结果。试想一下,查询中的任何一个子查询都会返回多个结果,select将如何工作?就这样

在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';
这将消除你的错误。然而,我猜结果并不是你想要的。你的问题没有明确说明你想要什么,所以这应该会让你走上一条更好的道路


注意:处理日期/时间时,应使用内置的日期/时间函数。您正在将它们转换为字符串,这只是一个坏主意。您不需要这样做,这会影响性能。

请标记dbms产品。(此处的一些非ANSI SQL…)一个或两个子选择返回多行。要么关联(包括到外部级别表的条件),要么执行联接。我添加了SQL Server标记,因为语法看起来像SQL Server.rinesh,您能帮我修改编码吗?用户希望显示计划时间下的所有记录您可以使用联接来联接
ChannelID
上的
Planning
PlanningTime
表。这是简单而直接的。但是,我试图修改它以使用join,但它无法输出我所期望的结果!用户希望显示他们输入的所有记录!我展示的编码是编码的一部分,用户希望在rowGordon中的列和时间中显示日期,这是易于准备和理解的示例编码。我的程序编码定义了输入参数的日期和时间。你修改的编码不能显示我期望的结果!它显示了很多重复记录,甚至我使用的是DISTINCE。一些标题显示在错误的列中。用户需要在列中显示日期,在行中显示时间。某些字段应为空,因为某些时段没有记录。我尝试使用内部连接,它也显示了错误的结果。
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';