2

真的很难找到一个好的标题。

这是一个问题:我有一个SELECT查询GROUP BY字段,它最多返回三个值(1、2、3)。这些值表示二进制数中“1”的位置。换句话说:

Query Output    |     Reult
0,1,2           |      7 (111)
1,2             |      6 (110)
3               |      1 (001)
-               |      0 (000)

好的,我知道这很容易。但是有两个限制。首先,我想要一个查询而不是函数/存储过程。其次,结果应该是一个字符串(如'010')而不是数字。

我找到了整数值的解决方案,但没有找到字符串(varchar)

SELECT COALESCE(sum(power(2, field)), 0) AS test FROM (
  SELECT field FROM  myTable GROUP BY field) a

我正在使用 SQL Server 2008,以防万一。

我也有这个解决方案,但是这个解决方案不能扩展到更多的输出:

  SELECT output = 
  CASE TEST 
    WHEN  0 THEN '000'
    WHEN  1 THEN '001'
    WHEN  2 THEN '010'
    WHEN  3 THEN '011'
    WHEN  4 THEN '100'
    WHEN  5 THEN '101'
    WHEN  6 THEN '110'
    WHEN  7 THEN '111'
  END
  FROM(
  select COALESCE(sum(power(2, 3 - field)), 0) as test from (
  select field from myTable group by field) a) b
4

1 回答 1

2

您可以使用二进制and和字符串连接:

select (case when test&4 > 0 then '1' else '0' end) +
       (case when test&2 > 0 then '1' else '0' end) +
       (case when test&1 > 0 then '1' else '0' end)
from (select 6 as test) t;

如果你对case陈述过敏,你可以这样做:

select CHAR(ascii(0) + (test&4)/4) +
       CHAR(ascii(0) + (test&2)/2) +
       CHAR(ascii(0) + (test&1)/1)
from (select 6 as test) t
于 2013-07-17T19:02:17.753 回答