1

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

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

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

tbl_id | col_1
1 | 你好
1 | 你好
1 | 这是怎么回事?

然后是 tbl_info 表:

编号 | 标题
1 | 问候

我希望它显示为:

问候
你好
你好
这是怎么回事?

我编写了以下 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

任何人都可以就我如何做到这一点提供任何建议吗?查看其他问题使我阅读了数据透视表,但我还没有看到任何可能适用于我的目的的方式。也许我误解了它。

对此的任何帮助将不胜感激。

4

2 回答 2

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
于 2012-10-09T08:24:30.303 回答
-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)

然而,这个解决方案是一个代码片段,而不是一个单一的查询。

于 2012-10-09T08:09:52.573 回答