Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何将所有列合并为一列_Sql Server_Tsql - Fatal编程技术网

Sql server 如何将所有列合并为一列

Sql server 如何将所有列合并为一列,sql-server,tsql,Sql Server,Tsql,我将三个表合并到一个表中,我注意到每个合并的表都有相似的数据列,从而产生冗余 将所有这些列更新为一列的最佳方式是什么 现在数据将被读取 WallJambHeadCut | WallJambSillCut | DoorJambSillCut | DoorJambHeadCut | ect .... 1 0 0 0 0 0

我将三个表合并到一个表中,我注意到每个合并的表都有相似的数据列,从而产生冗余

将所有这些列更新为一列的最佳方式是什么

现在数据将被读取

WallJambHeadCut | WallJambSillCut | DoorJambSillCut | DoorJambHeadCut | ect ....
       1               0                0                   0 
       0               0                1                   0
以上内容需要浓缩成两列:

  Headcut | SillCut
换句话说,这些列中的每一列都可以压缩成一列。我只是想确保我写了正确的update语句,因为我不喜欢把我的数据插起来

CREATE TABLE [dbo].[Table_1](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [WallJambHeadCut] [bit] NOT NULL,
    [WallJambSillCut] [bit] NOT NULL,
    [DoorJambSillCut] [bit] NOT NULL,
    [DoorJambHeadCut] [bit] NOT NULL,
    [VerticalHeadCut] [bit] NOT NULL,
    [VerticalSillCut] [bit] NOT NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

根据需要执行的复杂性,可以将所有列替换为tinyint类型的列,并执行按位操作来处理数据。实际上,我们在我正在做的项目中就是这么做的

对于你给出的例子,你将

0000 1000  --Which is 8
0000 0010  --Which is 2
每当需要更新这些值时,只需使用运算符

你可以在这里查看更多信息

tinyint更好,因为它只占用8位

  • 添加新列
  • 更新表格并为每行设置newCol=WallJambHeadCut | WallJambSillCut | DoorJambSillCut | DoorJambHeadCut--

  • Cheers

    在int类型的列上创建,并使用位操作存储/读取/更新数据。例如,第一位用于col1,第二位用于col2,第三位用于col3等(假设每列只有两种可能性)。

    您能从这个查询中得到想要的吗

    select Headcut,Sillcut from (
    select [WallJambHeadCut] as Headcut,[WallJambSillCut] as Sillcut from table_1 
    union all
    select [DoorJambHeadCut] as Headcut,[DoorJambSillCut] as Sillcut from table_1 
    union all
    select [VerticalHeadCut] as Headcut),[VerticalSillCut] as Sillcut from table_1 
    ) a
    

    我甚至都没想过要。。。谢谢大家。