2016-12-10 89 views
0

ステータスに基づいてカラム名を達成する方法がわかりませんが、同じカラム名を複数表示することはできませんが、 「成功」または「失敗」の両方の状態がフェッチされることはありません。変数に値が定義されている場所に基づいて、0または1のいずれか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私は彼が2番目の列名を「成功」としたいと思う。ステータス= 1のときは「失敗」、ステータスが0のときは「失敗」 – Susang

+0

はい、私はまさにそのようにしたいと思う。 – Fever

答えて

1

はい、正確に理解すれば、動的クエリーで可能ですが、ステータス= 1の場合は2番目の列名が「成功」になる可能性があります。失敗 '

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

関連する問題