SQL Server在逻辑上添加字符串(0,1)

时间:2016-03-16 14:35:48

标签: sql sql-server

我有一个表(我们称之为AAA),其中我的4个channel_id中的每一个都有自己的专用publish flag列,这是一个由0,1组成的char(4)

这是一个例子

on_date                 rate_id type_id channel_id  publish_flag
2016-02-08 00:00:00.000 98      1       1           1000
2016-02-08 00:00:00.000 98      1       2           0100
2016-02-08 00:00:00.000 98      1       4           0000
2016-02-08 00:00:00.000 98      2       1           1000
2016-02-08 00:00:00.000 98      2       2           0100
2016-02-08 00:00:00.000 98      2       3           0001
2016-02-08 00:00:00.000 98      2       4           0000

我想通过

对结果进行分组
  • on_date(在本例中为2016-02-08 00:00:00.000 98)
  • rate_id(在此示例中为98)
  • type_id(在此示例中为1和2)
  • 而不是channel_id,以获得发布标志列的“逻辑添加”

上述转变的例子:

on_date                 rate_id type_id     publish_flag
2016-02-08 00:00:00.000 98      1           1100    
2016-02-08 00:00:00.000 98      2           1101

因此对于第一组:

1000   +
0100   +
0000   =
--------
1100

和第二组:

1000   +
0100   +
0001   +
0000   =
--------
1101

我是否可以在MS SQL Server 2008R2中实现上述功能?

谢谢

1 个答案:

答案 0 :(得分:4)

据我所知,你需要每个位置的最高位。 试试这个:

SELECT 
  on_date,rate_id,type_id,
  MAX(substring(publish_flag, 1,1)) + MAX(substring(publish_flag, 2,1)) + 
  MAX(substring(publish_flag, 3,1)) + MAX(substring(publish_flag, 4,1)) as publish_flag
FROM YourTable
GROUP BY on_date,rate_id,type_id