Sql 如何为表中的每一列指定1或0?

Sql 如何为表中的每一列指定1或0?,sql,sql-server,Sql,Sql Server,我有一个名为Person的表,有15列。根据事件ID,将使用某些列,而不使用某些列。例如,5的事件ID将使用名称、地址和电话列。同时,10的EventId将使用Name和Email列 我想我必须用EventId创建一个表,并以某种方式输入1或0,以知道特定事件应该包含哪些列。然而,我不知道如何将所有这些联系在一起并使其发挥作用 我正在使用SQL Server create table #test (EventID varchar(max), Name varchar(max), [Addres

我有一个名为
Person
的表,有15列。根据
事件ID
,将使用某些列,而不使用某些列。例如,5的
事件ID将使用
名称
地址
电话
列。同时,10的
EventId
将使用
Name
Email

我想我必须用
EventId
创建一个表,并以某种方式输入1或0,以知道特定事件应该包含哪些列。然而,我不知道如何将所有这些联系在一起并使其发挥作用

我正在使用SQL Server

create table  #test (EventID varchar(max), Name varchar(max), [Address] varchar(max), [Phone] varchar(max))
insert into #test 
values ('1','Abc','gabanes adfga','1521623612'),
       ('3','adz','gabwega abae' ,'1521623612'),
       ('5','qqb','asdhahn ansxeh','1521623612'),
       ('5','qas','smystrj sthshs','1521623612'),
       ('2','qar','sthtr sthsht ','1521623612'),
       ('1','qha','msgnsn abawe ','1521623612')

; with cte as 
(
select *, case when EventID = 5 then 1 else 0 end as Flag from #test 
) 
select Name, [Address], Phone  from cte
where flag = 1

;with cte1
 as ( select *, case when EventID = 5 then 1 else 0 end as Flag from #test )
 select Name, Phone from cte1 
 where flag != 1 

我随机命名了这些列,只是将垃圾数据放入字段中。然而,希望这有助于实现你的目标

能否添加一些示例数据,并指定0或1个值?顺便说一句,存储从其他列计算的值通常不是一个好主意,如果这样做,数据不一致是一个常见问题。(使用触发器、视图或“计算列”。)您还可以为每个项目设置一行(例如,5+名称和5+地址),因此您不需要为每个项目设置单独的列,只存储带有“1”的列,缺少的列将为“0”,但这只是一个意见问题,取决于您的数据/用例tooJamesZ,那太好了。我将如何为您所说的每一项创建这一行?这里是一个开始获得您问题答案的好地方。