2016-12-29 25 views
-1

我想從表中選擇列有條件,我只是跟着這個link如何避免選擇查詢列有條件

SELECT ID,(CASE WHEN @check=0 
      THEN Teacher END) 'Teacher' 
FROM Register 

結果時@check =1

--------------------- 
| ID | Teacher | 
--------------------- 
| 10 | NULL | 
| 20 | NULL | 
-------------------- 

在這種情況下,我不不想選擇Teacher列,如何操作?

如果不可能如何刪除所有行都有空值的列?

+0

因爲我知道這是不可能的列選擇語句,但是你可以在選擇語句後刪除列 –

+0

@SandipPatel如何刪除所有行只有空值的列 – mass

+0

您不能刪除列,只是創建一個動態查詢。 https://msdn.microsoft.com/en-us/library/ms188001.aspx –

回答

1

使用IF ELSE條件

IF @check = 0 
BEGIN 
    SELECT ID, Teacher 'Teacher' 
    FROM Register 
END 
ELSE 
BEGIN 
    SELECT ID FROM Register 
END 

或使用動態查詢像下面

DECLARE @qryStr VARCHAR(2000) 
DECLARE @check INT =0 
SET @qryStr = 'SELECT ID '+CASE WHEN @check=0 THEN ',Teacher' ELSE '' END +' FROM Register' 
PRINT @qryStr 
EXEC(@qryStr) 
+0

:)這是可能的,但這不是我想要的。這是不可能的,因爲有多列,來描述我選擇簡單的例子與一列的問題 – mass

+0

我剛剛修改了答案。請檢查是否有幫助 –

+0

在我的情況下,我有不同條件的多個列 – mass

0

此動力QRY不是好主意。您應該重寫您的解決方案或將表格非規範化。

變體1:

declare @removeCol1 bit = 1 
declare @removeCol3 bit = 1 

declare @qry varchar(4000) = 'select col1, col2, col3, col4, col5 from dbo.yourtable' 

if @removeCol1 = 1 set @qry = replace(replace(@qry, 'col1,', ''), 'col1', '') 
if @removeCol3 = 1 set @qry = replace(replace(@qry, 'col3,', ''), 'col3', '') 

print @qry 
exec (@qry) 

變2:你的桌子上使用 支點和篩選正確。但是你的例子不足以舉例查詢。