仅当其中一列 = 1 时,如何将列转换为行?

Posted

技术标签:

【中文标题】仅当其中一列 = 1 时,如何将列转换为行?【英文标题】:How do I convert columns to rows only if one of the columns = 1? 【发布时间】:2021-08-08 23:27:59 【问题描述】:

我正在按照本指南在 T-SQL 中将列转换为行:https://blog.devart.com/is-unpivot-the-best-way-for-converting-columns-into-rows.html

但是,只有当其中一列设置为 1 时,我才需要进行转换。

表格:

item    milk     peanut     soy
A       1        1          0
B       0        0          1
C       0        0          0

想要的结果:

item      allergen
A         milk
A         peanut
B         soy

请注意,我故意遗漏了项目 C。这是因为所有过敏原列都不是1,因此在最终表中不需要。我该如何做到这一点?

【问题讨论】:

【参考方案1】:

您可以使用cross apply 和过滤:

select t.item, v.allergen
from t cross apply
     (values ('milk', milk), ('peanut', peanut), ('soy', soy)
     ) v(allergen, flag)
where flag = 1;

【讨论】:

以上是关于仅当其中一列 = 1 时,如何将列转换为行?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL-将列转换为行,同时保留一列

将列转换为行并在 Access 中获取复选框的总和

如何将列中的连接值转置为行

SQL server 如何将列值转换为行

将列值转换为行值

oracle 10g如何将列转换为行