首页 > 解决方案 > SQL 查询 - 填充列取决于

问题描述

我的数据库逐行报告了几个装有软件(仅特定软件)的终端。这是一个例子:

HOSTNAME | MAC ADDRESS | IP ADDRESS | SOFTWARE NAME
---------------------------------------------------
PC-AAA   | 94-da-r2-12 | xx.xx.xx.xx| TeamViewer
PC-AAA   | 94-da-r2-12 | xx.xx.xx.xx| Google Chrome
PC-BBB   | 94-da-s4-16 | xx.xx.xx.xx| TeamViewer
PC-BBB   | 94-da-s4-16 | xx.xx.xx.xx| Google Chrome 
etc.

如何构建我的查询以便为每个软件提供一个列,如下例所示?

HOSTNAME | MAC ADDRESS | IP ADDRESS | TeamViewer | Google Chrome
----------------------------------------------------------------
PC-AAA   | 94-da-r2-12 | xx.xx.xx.xx| TeamViewer | 
PC-AAA   | 94-da-r2-12 | xx.xx.xx.xx|            | Google Chrome
PC-BBB   | 94-da-s4-16 | xx.xx.xx.xx| TeamViewer |
PC-BBB   | 94-da-s4-16 | xx.xx.xx.xx|            | Google Chrome

标签: sqlpivotcrosstab

解决方案


这是如何旋转 SQL 查询... SQL 服务器支持旋转,MySQL 和其他不支持

如果有固定数量的软件,aCASE WHENGROUP BY将起作用

SELECT
HOSTNAME, MAC ADDRESS, IP_ADDRESS, 
CASE
WHEN (SOFTWARE_NAME = 'TeamViewer') THen 'TeamViewer'
ELSE ''
END AS TeamViewer
CASE
WHEN (SOFTWARE_NAME = 'GoogleChrome') THen 'GoogleChrome'
ELSE ''
END AS GoogleChrome

FROM
log_table
GROUP BY
HOSTNAME, MAC ADDRESS, IP_ADDRESS

推荐阅读