我有一个示例表(#temp),例如:
Account ABC DEF GHI
-----------------------------------
A001 1000.00 NULL NULL
A002 NULL 500.00 800.00
A003 NULL 700.00 NULL
A004 1100.00 NULL NULL
标头ABC,DEF,GHI是透视的结果。我想:
select
*,
case
when ABC is not NULL and JKL is not NULL
then 1
else 0
end as newColumn
from
#temp
出现此错误是因为JKL
不存在。但是,它可以存在并且必须在执行时加以考虑。如何编辑查询语句以检查ABC和JKL列是否存在>如果它们不存在则为0值>如果它们确实存在并且为空则为0值>如果它们都不为null则在newColumn中为1值。
答案 0 :(得分:1)
当您使用临时表时,这有点难看,但是也许可以这样工作:
IF NOT EXISTS (SELECT 1
FROM tempdb.sys.tables t
JOIN tempdb.sys.columns c ON t.object_id = c.object_id
WHERE t.name LIKE N'#temp[_]%'
AND c.[name] = N'JKL')
ALTER TABLE #Temp ADD JKL int;
DECLARE @SQL nvarchar(MAX),
@CRLF nchar(2) = NCHAR(13) + NCHAR(13);
--Need dynamic SQL, as the batch will fail still otherwise
SET @SQL = N'SELECT *,' + @CRLF +
N'CASE WHEN ABC IS NOT NULL AND JKL IS NOT NULL THEN 1 ELSE 0 END AS newColumn' + @CRLF +
N'FROM #temp;'
EXEC sp_executesql @SQL;
如果JKL
的值应不为NULL
,则将以下内容用于ALTER
:
ALTER TABLE #Temp ADD JKL int DEFAULT 0 WITH VALUES;
答案 1 :(得分:0)
我能够完成:
IF NOT EXISTS (select 1
from tempdb.sys.tables t
inner join tempdb.sys.columns c
on t.object_id = c.object_id
where t.Name like '%temp%' AND
c.Name = 'JKL')
ALTER TABLE #temp ADD JKL int;
select * from #temp