将多个布尔列合并为一个列

时间:2020-03-12 13:24:53

标签: sql sql-server tsql

我是来自ERP系统的生成报告,在该系统中为用户提供了一个复选框,该复选框为所选的每个项目返回布尔值。该数据库托管在SQL Server上。

但是,用户也可以选择带有其他值的合同,如下所示。

enter image description here

我想将类别捕获为单列,并且我不介意在视图中有重复的行。我希望第一行针对相同的参考ID返回 Contract ,第二行返回所选的其他值。

enter image description here

2 个答案:

答案 0 :(得分:4)

您可以使用apply

select distinct t.*, tt.category
from t cross apply
     ( values ('Contracts', t.Contracts),
              ('Tender', t.Tender),
              ('Waiver', t.Waiver),
              ('Quotation', t.Quotation)
     ) tt(category, flag)
where flag = 1;

答案 1 :(得分:1)

我想一个简单的方法是:

select *, 'Contract' as [Category] from [TableOne] where [Contract] = 1
union all select *, 'Tender' as [Category] from [TableOne] where [Tender] = 1
union all select *, 'Waiver' as [Category] from [TableOne] where [Waiver] = 1
union all select *, 'Quotation' as [Category] from [TableOne] where [Quotation] = 1
union all select *, '(none)' as [Category] from [TableOne] where [Contract]+[Tender]+[Waiver]+[Quotation] = 0
order by [Reference ID]

请注意,最后一行放在此处,以防万一您需要处理全零的情况。