2017-02-23 90 views
-1

喜來動態改變列名有此要求:如何在結果集中

SELECT COL1, COL2, COL3 FROM TEST 

我必須跟這些數據的另一個表:

----------------- 
| COL | VALUE | 
----------------- 
| COL1 | TOTO | 
----------------- 
| COL2 | TATA | 
----------------- 
| COL3 | TITI | 
----------------- 

我想有要求看起來一個結果這樣的:

--------------------- 
| TOTO| TATA | TITI | 
--------------------- 

而不是

--------------------- 
| COL1| COL2 | COL3 | 
--------------------- 

謝謝您的幫助

+0

我真的不明白這一點。你想轉軸嗎? – RoundFour

+0

沒有我的數據顯示正確。目的只是通過位於另一個表中的對應值來更改列名稱(COL1,COL2,COL3) – malignois

+1

您需要使用動態SQL來爲每列生成具有正確別名的語句。一個體面的實現將需要錯誤檢查來驗證在別名表中存在別名的列。而不是在T-SQL中執行此操作,在消費應用程序中可能會更好地進行別名。 –

回答

0

我不知道這是否是更多鈔票,但如果是這樣,你需要做的子查詢。

類似的東西:

SELECT 
COL1 as (SELECT value FROM anothertablewiththesedata WHERE condition), 
COL2 as (SELECT value FROM anothertablewiththesedata WHERE condition), 
COL3 AS (SELECT value FROM anothertablewiththesedata WHERE condition) 
FROM TEST 

也許是棘手或IMPOSIBLE。

有人可以確認或糾正我嗎? :)

+0

不幸的是,你不能這樣做,給你'錯誤的語法附近'('。 ' – krtek

+0

Check @RoundFour answer。 – nobody

+0

是的,我已經投他的解決方案 – krtek

0

您可以通過使用動態SQL來實現它。

declare @sql varchar(max) 

set @sql='SELECT 
COL1 as ' + (SELECT value FROM anothertablewiththesedata WHERE col = 'col1') + ' , 
COL2 as ' + (SELECT value FROM anothertablewiththesedata WHERE col = 'col2') + ' , 
COL3 as ' + (SELECT value FROM anothertablewiththesedata WHERE col = 'col3') + ' , 
FROM TEST' 

exec @sql 
1

爲了使動態,你可以使用動態透視:

DECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX) 
SET @cols = N''; 
SELECT @cols += N', p.' + QUOTENAME(value) FROM (SELECT value FROM dbo.test) x 
SELECT @cols 

SET @sql = N' 
SELECT * 
FROM (SELECT [col],[value] FROM [dbo].[test]) P 
PIVOT (MIN(value) FOR COL IN (' 
    + STUFF(REPLACE(@cols, ', p.[', ',['), 1, 1, '') 
    + ') 
) AS p;'; 

exec sp_executesql @sql;