2017-02-23 62 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;