我已经将三个表合并到一个表中,我注意到每个合并表都有类似的数据列,可以产生冗余。
将所有这些列更新为一列的最佳方法是什么?
现在数据将会读取
WallJambHeadCut | WallJambSillCut | DoorJambSillCut | DoorJambHeadCut | ect ....
1 0 0 0
0 0 1 0
上述内容需要压缩两列:
Headcut | SillCut
换句话说,这些列中的每一列都可以压缩成一列。我只是想确保我写了正确的更新语句,因为我讨厌杰克我的数据。
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]
答案 0 :(得分:1)
你能从这个查询中得到你想要的东西吗?
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
答案 1 :(得分:0)
根据您要执行的复杂性,您可以使用tinyint类型的列替换所有列,并执行按位操作来处理数据。我们实际上是在我正在进行的项目中这样做。
对于您提供的示例,您将拥有
0000 1000 --Which is 8
0000 0010 --Which is 2
每当您需要更新这些值时,您只需使用运算符。
您可以在http://msdn.microsoft.com/en-us/library/ms176122.aspx
查看更多信息tinyint更好,因为它只占用8位
干杯
答案 2 :(得分:0)
在int类型的列上创建,并使用按位运算存储/读取/更新数据。例如,第一位用于col1,第二位用于col2,第三位用于col3等(假设每列只有两种可能性)。