mysql - 从另一个查询的结果中向查询添加列

标签 mysql sql sql-server

好吧,我会尽可能简单地解释一下。

我有一个名为 approval_levels 的表,其中有 2 列:

|LEVEL_ID  |NAME          |
|1         |app_level_1   |
|2         |app_level_2   |
|3         |app_level_3   |

我有第二个表叫做 requests,其中有 3 列:

|REQUEST_ID    |PRODUCT_NAME    |MANUFACTURER   |
|1             |wd-40           |Acme           |
|2             |Windex          |Acme           |
|3             |Propane         |Acme           |

我有第三个表链接两个名为 request_approvals 的表,它有两列:REQUEST_ID、LEVEL_ID。当特定级别的请求获得批准时,我会在该表中插入一个值。因此,例如,假设请求 1 已获得所有 3 个级别的批准,请求 2 仅获得级别 1 的批准,请求 3 已获得级别 3 的批准,表格将显示如下内容。

|REQUEST_ID    |LEVEL_ID       |
|1             |1              |
|1             |2              |
|1             |3              |
|2             |1              |
|3             |3              |

好的,挑战来了:我需要在报告中显示所有请求,为每个级别创建一个列,并显示该请求是否在该级别获得批准。最终结果必须是这样的:

|REQUEST_ID |PRODUCT_NAME |MANUFACTURER |app_level_1 |app_level_2 |app_level_3 |
|1          |wd-40        |Acme         |X           |X           |X           | 
|2          |Windex       |Acme         |X           |            |            |
|3          |Propane      |Acme         |            |            |X           | 

请记住,如果将另一个值添加到 approval_levels 表(即 app_level_4),我需要将另一列添加到表中动态调用 app_level_4。

现在,我到底该如何做这样的事情???我什至不知道从哪里开始寻找?

感谢您的帮助!

最佳答案

如果您使用的是 SQL Server,请查看 PIVOT 命令。我只是自己写了其中一个,所以我修改了它以适合您的表结构:

DECLARE @COLUMNS    NVARCHAR(MAX)
DECLARE @SQL        NVARCHAR(MAX)

SELECT @COLUMNS = COALESCE(@COLUMNS + ', ','') + QUOTENAME(NAME) FROM approval_levels

SELECT @SQL = N'
    SELECT REQUEST_ID, PRODUCT_NAME, MANUFACTURER, ' + @COLUMNS + '
    FROM (
        SELECT
            r.REQUEST_ID,
            r.PRODUCT_NAME,
            r.MANUFACTURER,
            a.NAME
        FROM
            request_approvals ra
            INNER JOIN approval_levels a ON a.LEVEL_ID = ra.LEVEL_ID
            INNER JOIN requests r ON r.REQUEST_ID = ra.REQUEST_ID
        ) p
    PIVOT(COUNT(NAME) FOR NAME IN ( ' + @COLUMNS + ' )
    ) AS pvt'

EXEC sp_executesql @SQL

关于mysql - 从另一个查询的结果中向查询添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23074073/

相关文章:

php - 您的 SQL 语法有误;查看与您的 MySQL 服务器版本对应的手册,了解在 '' 附近使用的正确语法

sql - 我可以获得从 LinqDataSource 生成的 T-SQL 查询吗?

python - SQL Server 将 b'...' 添加到我存储的 jwt 标记中

mysql - 将电子邮件 VARCHAR(320) 存储为 UNIQUE,#1071 - 指定的键太长;最大 key 长度为 767

sql - 扑克和使用 SQL 事务处理彩池中的钱以保持一致性

c# - 线类报表、线日报表

php - 使用在线 PHP 文件设置对 DB 的本地调用 - 连接问题

php - 使用函数 php 循环数组值

php - Mysqli fetch_assoc 第一个结果

Python/MySQL 错误