我是来自ERP系统的生成报告,在该系统中为用户提供了一个复选框,该复选框为所选的每个项目返回布尔值。该数据库托管在SQL Server上。
但是,用户也可以选择带有其他值的合同,如下所示。
我想将类别捕获为单列,并且我不介意在视图中有重复的行。我希望第一行针对相同的参考ID返回 Contract ,第二行返回所选的其他值。
答案 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]
请注意,最后一行放在此处,以防万一您需要处理全零的情况。