确实很难找到一个好的标题。
问题是:我有一个 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
最佳答案
您可以使用二进制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
关于SQL - 从 '1' s 的位置查找二进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17707945/