如何在sql中使用子查询选择一个列值?

时间:2016-10-26 06:49:36

标签: sql-server

当我运行此查询时,它将显示错误

select Title,ParentTitle,(select   t.Title+'_'+t.ParentTitle   from CTE t join CTE s on t.Title=s.Title where t.visible=0 or t.visible=1 )as show  from CTE

当我上面的查询时,它将显示如下结果 结果

 Title  ParentTitle show
    p1  Home    p1_Home
    p1.1    p1  p1_Home
    p1.1.1  p1.1    p1_Home
    p2  Home    p1_Home
    p2.1    p2  p1_Home
    p2.2    p2  p1_Home
    p2.3    p2.2    p1_Home
    P3  Home    p1_Home
    p3.1    p3  p1_Home
    P3.1.1  p3.1    p1_Home

预期 结果

Title   ParentTitle show
p1  Home    p1_Home
p1.1    p1  p1.1_p1
p1.1.1  p1.1    p1.1.1_p.11
p2  Home    p2_Home
p2.1    p2  p2.1_p2
p2.2    p2  p2.2_p2
p2.3    p2.2    p2.3_p2.2
P3  Home    p3_Home
p3.1    p3  p3.1_p3
P3.1.1  p3.1    p3.1.1_p3.1

错误消息

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

如何解决这个问题..

2 个答案:

答案 0 :(得分:0)

您需要在子查询中使用WHERE子句以保证它返回标量值。

select Title,ParentTitle,(select visible from CTE WHERE Title = ????)as show  from CTE

你需要WHERE Title = ????根据您的情况而不是WHERE Title = ????

的逻辑

答案 1 :(得分:0)

根据您的需要,您可以执行以下操作:

select Title,ParentTitle,(select top 1 visible from CTE )as show  from CTE

select Title,ParentTitle,(select max(visible) from CTE )as show  from CTE

或您想要的任何聚合函数。这就是聚合函数正在做的事情,它们聚合结果并返回一个值。