【问题标题】:How do I convert columns to rows only if one of the columns = 1?仅当其中一列 = 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,因此在最终表中不需要。我该如何做到这一点?

【问题讨论】:

    标签: sql tsql sql-server-2008-r2


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2023-01-19
      • 1970-01-01
      • 2021-09-22
      • 2015-02-20
      • 1970-01-01
      • 2011-03-31
      • 2021-06-07
      • 1970-01-01
      • 2021-12-07
      相关资源
      最近更新 更多