根据状态0或1显示列名称

时间:2016-12-10 04:56:03

标签: sql dynamic sql-server-2012 conditional

我不明白如何根据状态实现列名,我认为不可能为同一列显示多个列名,但是我要求显示列名“成功”或“失败”两种状态永远不会被提取,我必须根据条件的位置一次只选择一个0或1,在变量中定义值。

CREATE TABLE #sqlJobHistory(jobId INT, jobStatus INT)
INSERT INTO #sqlJobHistory VALUES 
(1, 0),
(2, 0),
(3, 1),
(4, 1),
(5, 1),
(6, 0),
(7, 1)

我想根据状态显示我的第二列名称,到目前为止我尝试了注释行但是:(

SELECT MAX(jobId) maxJobId, 
    COUNT(*) AS 'Failure' --AS CASE WHEN jobStatus = 0 THEN 'Fail' ELSE 'Success' END 
FROM #sqlJobHistory 
WHERE jobStatus = 0 
GROUP BY jobStatus

如果有可能的话,你能帮助他找到实现所需输出的正确方法吗,如果不可能的话,那就非常抱歉浪费你宝贵的时间。

1 个答案:

答案 0 :(得分:1)

是的,通过动态查询可以实现,如果我理解正确,如果状态= 1,则第二列名称为“成功”,否则为“失败”

DECLARE @status INT, @sql VARCHAR(500)
SET @status = 1 --It can be 0 or 1 and I think you already have this variable

SET @sql ='
    SELECT MAX(jobId) maxJobId, 
    COUNT(*) AS ' + 
    CASE WHEN CAST(@status AS VARCHAR)= 0 THEN 'Failure' ELSE 'Success' END + '
FROM #sqlJobHistory 
WHERE jobStatus = ''' + CAST(@status AS VARCHAR) + '''
GROUP BY jobStatus'

EXEC(@sql)