使用表中的数据作为列标题

时间:2012-10-09 07:48:53

标签: mysql sql

我有一个包含两个表的数据库,component_psar和tbl_info。 component_psar表有字段'tbl_id',它引用tbl_info中相应的'id'字段。

我需要编写一个查询,其中数据来自tbl_info,并用作component_psar中该列的标题。

因此,如果component_psar表包含数据:

tbl_id | col_1
1      |  Hello
1      |  Hi
1      |  What's up?

然后是tbl_info表:

id | heading
1  | Greetings

我希望它显示为:

Greetings
Hello
Hi
What's up?

我编写了以下SQL查询来尝试完成此任务:

SELECT component_psar.col_1 as (SELECT tbl_info.heading FROM tbl_info, component_psar WHERE tbl_info.id = '1') FROM tbl_info, component_psar WHERE (component_psar.tbl_id = '1')

但这只会引发语法错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(SELECT tbl_info.heading FROM tbl_info, component_psar WHERE tbl_info.id = compo' at line 1

任何人都可以就如何实现这一目标提出任何建议吗?看看其他问题让我读到数据透视表,但我没有看到任何方式可能对我的目的有用。也许我误解了它。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

我会尝试分离从数据库中检索数据并将其格式化以便显示的过程。

简单的内部联接应该适用于您的查询

select tbl_info.heading as Heading,component_psar.col_1 as Value 
from tbl_info 
inner join component_psar on component_psar.tbl_id = tbl_info.id
order by tbl_info.heading

这将为您提供以下查询结果

Heading   | Value 
----------+--------------
Greetings |  Hello
Greetings |  Hi
Greetings |  What's up?

如何处理显示取决于您的编程环境。

如果您只是打印到屏幕上,以下伪代码将显示如何仅在更改时打印标题

current_heading = ""
for each row in results
    if row.heading not equal to current_heading   
        current_heading  = row.heading
        print blank line 
        print current_heading 
    end if
    print row.value
loop

答案 1 :(得分:-1)

在MS SQL中,可以通过以下方式实现:

    declare @sql nvarchar(max)
declare @col_name varchar(100)
select @col_name = heading from tbl_info where heading = 'greetings'
set @sql = 'select col_1 as ' + quotename(@col_name) + ' from component_psar'
exec(@sql)

但是,此解决方案是一个代码段,而不是一个查询。