2017-06-28 41 views
0

我必須做一個SQL Server Statement,當它爲null時,必須返回一個空行,而數據otherwhise。SQL SERVER從If存在中選擇多個字段

我想要做一個選擇(如果存在)但在父表上有錯誤。

I簡化它。但其含義是,當條件爲空時檢索一些字段,當其不爲空時檢索其他字段。

它工作正常,當我不把它在另一個選擇....我需要檢索它作爲一個表做內部加入與其他clouse。

我該如何解決?

這裏是我的代碼..

select * from 
 
\t (
 
     if exists(select isnull(SECTOR_ID_DESTINO_BAD,-1) 
 
\t \t \t from workflow_Compras_detalle w 
 
\t \t \t where w.id=2) 
 
\t \t \t begin \t \t 
 
\t \t \t  select null as Sector,null as sector_id_origen 
 
\t \t \t end 
 
\t \t \t else 
 
\t \t \t begin 
 
\t \t \t \t select top 1 isnull(ws.sector,'') sector, wd.sector_id_origen 
 
\t \t \t \t from workflow_Compras_detalle wd 
 
\t \t \t \t where orden < \t 10 
 
\t \t  end 
 
\t)Table

+0

這不就是左外連接會做什麼嗎? –

回答

2

你應該嘗試將數據插入到一個臨時表或表變量,然後從該表中獲取數據,這裏有一個例子與表變量,如果你需要更持久的東西,你可以使用#Temp表,我建議你看看這個:difference between var table and #Temp Table

DECLARE @VAR_TABLE AS TABLE(
Sector varchar(25), 
sector_id_origen int 
) 

if exists(select isnull(SECTOR_ID_DESTINO_BAD,-1) 
      from workflow_Compras_detalle w 
      where w.id=2) 
    begin  
       INSERT INTO @VAR_TABLE 
       Select null as Sector,null as sector_id_origen 
    End 
Else 
    begin 

     INSERT INTO @VAR_TABLE 
     select top 1 isnull(ws.sector,'') sector, wd.sector_id_origen 
     from workflow_Compras_detalle wd 
     where orden < 10 
End 

SELECT * FROM @VAR_TABLE 
+1

將[CTE]與[表格]變量與臨時表格添加到[比較](http://www.dotnettricks.com/learn/sqlserver/difference-between-cte-and-temp-table-and-table-變量) –