2016-12-10 2 views
0

Я не понимаю, как достичь имени столбца на основе состояния, я думаю, что невозможно отобразить несколько имен столбцов для одного и того же, но у меня есть это требование, чтобы отображать имя столбца либо ' «Успех» или «Сбой», и оба состояния никогда не будут выбраны, я должен выбрать только один за один раз либо 0, либо 1 на основании того, где условие, значение определено в переменной.Отобразить имя столбца в соответствии с состоянием 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 Я думаю, что он хочет, чтобы второе название колонки называлось «Успех», какой статус = 1 или «Сбой», когда статус = 0 – Susang

+0

Да, я точно так хочу, – Fever

ответ

1

Да, это может быть возможно благодаря динамическому запросу, если я правильно понял, ваше второе имя столбца - «Успех», если Status = 1 else ' Fail '

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