sql - 拥有带有标志值的唯一记录

标签 sql sql-server pivot

SERIAL_NUMBER | BIP_WIDE_AREA_PORT | IP_FAST_REROUTE | GWIP_MULTICAST
_____________________________________________________________________
N7608760           YES                 NO                 NO
N7608760           NO                  YES                NO

上面的表片段有四列serial_number、BIP_WIDE_AREA_PORT、IP_FAST_REROUTE、GWIP_MULTICAST

因此,我有一个序列号列表,并展示我创建的标志的相关产品,即 BIP_WIDE_AREA_PORT、IP_FAST_REROUTE 等。我想在一条记录中展示所有产品信息。例如,在这里:对于 service_number = N2039163R - 我希望一行显示所有标志的信息,而不是像这样的两个/更多记录:

SERIAL_NUMBER | BIP_WIDE_AREA_PORT | IP_FAST_REROUTE | GWIP_MULTICAST
_____________________________________________________________________
N7608760           YES                 YES                NO

谁能建议如何实现这一目标?我对PIVOT功能不是很熟悉,我尝试过但它不起作用。

我正在尽可能简单地编写我的案例陈述:

CASE 
    WHEN P1.name LIKE '%BIP WIDE AREA PORT%' THEN 'Yes'
    ELSE 'No' 
END AS BIP_WIDE_AREA_PORT,
CASE 
    WHEN P1.name LIKE 'NEXTG BACKUP' THEN 'Yes'
    ELSE 'No' 
END AS NEXTG_BACKUP

最佳答案

您可以使用GROUP BYMAX()来做到这一点:

因为“Y”>“N”,与NO相比,YES将是最大值。

SELECT SERIAL_NUMBER, MAX(BIP_WIDE_AREA_PORT) AS BIP_WIDE_AREA_PORT,
                      MAX(IP_FAST_REROUTE) AS IP_FAST_REROUTE,
                      MAX(GWIP_MULTICAST) AS GWIP_MULTICAST
FROM mytable
GROUP BY SERIAL_NUMBER;

Demo here

关于sql - 拥有带有标志值的唯一记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77561929/

相关文章:

mysql - 在 MySQL 的同一个表中创建 2 个 AUTO _INCREMENT 列

sql-server - 更新 EAV 表行的最佳实践

mysql - 在子查询中实现 WHERE 子句来获取数据透视列的值?

mysql - 如何按日期分组并根据值创建列?

SQL根据条件跳过最大行

c# - 关于 global.asax 和那里的事件

sql - VBA事务

sql - 表更新触发异步后从 SQL Server 运行控制台应用程序?

excel - 数据透视表无法找到当年 1 月与上年 12 月之间的差异。 Excel 2010

php - 使用没有列别名的 PDO::FETCH_ASSOC 的奇怪 MYSQL 结果