2016-12-10 35 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