2016-10-26 40 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 

或什麼的聚集功能。這是聚合函數正在做的事情,它們彙總結果並返回一個值。

相關問題