我想有条件地从表中选择列,我只是按照link,
SELECT ID,(CASE WHEN @check=0
THEN Teacher END) 'Teacher'
FROM Register
@check =1
---------------------
| ID | Teacher |
---------------------
| 10 | NULL |
| 20 | NULL |
--------------------
在这种情况下,我不想选择Teacher
列,如何执行此操作?
如果不可能如何删除所有行具有空值的列?
答案 0 :(得分:2)
使用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)
答案 1 :(得分: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: 在桌面上使用pivot并正确过滤。但是您的示例并不适用于示例查询。