2016-10-26 109 views
1

当我运行此查询它会显示错误如何在sql中使用子查询选择一个列值?

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. 

如何解决这个..

+0

[SQL Server子查询的可能重复返回多个值。这是不允许的,当子查询遵循=,!=,<, <= , >,> =](http://stackoverflow.com/questions/2653188/sql-server-subquery-returned-more-than-1-value-this-is -s-s) –

+0

你能否提供该表的数据? –

回答

0

你需要一个WHERE子句中的子查询,以保证它返回一个标值。

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

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

+0

选择标题,ParentTitle,(从CTE可见的= 0选择可见),从CTE显示我试过这个..也错误相同... @ Flicker – Meline

+0

添加一个条件不一定会获取1行。 – sagi

+0

您需要将ti更改为仅返回1行。如果CTE中有多于一行的可见性= 0,那么你仍然会得到错误。如果没有答案解决您的问题。请提供更多细节。 – FLICKER

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 

或什么的聚集功能。这是聚合函数正在做的事情,它们汇总结果并返回一个值。

相关问题