2016-12-10 24 views
0

我不明白如何根据状态实现列名,我认为不可能为同一列显示多个列名,但是我有这个要求来显示列名'成功“或”失败“,并且这两种状态都不会被获取,我必须一次只选择一个,基于哪个条件,在变量中定义值。根据状态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 

能否请你帮他什么是实现所需的输出的正确方法如果不可能,那么非常抱歉浪费你的宝贵时间

+0

你能更具体地说明你想达到什么吗?例如。确切的输出? 原则上,我不认为有可能有一个列名取决于一些数据依赖条件。 –

+0

@MarcinZukowski我认为他希望第二列名称为'Success'status status = 1时状态= 1或'失败' – Susang

+0

是的,我完全想要, – Fever

回答

1

是的,它可以通过动态查询,如果我理解正确,你的第二列名称是'成功',如果状态= 1 else'失败'

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) 
+0

它的工作完美,谢谢@Suraz – Fever