2

これにぴったりのタイトルを見つけるのは本当に難しいです。

質問は次のとおりです。最大 3 つの値 (1、2、3) を返すフィールドのSELECTクエリがあります。GROUP BYこれらの値は、2 進数での「1」の位置を表しています。言い換えると:

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

わかりました、簡単です。しかし、2 つの制約があります。まず、関数/ストア プロシージャではなく、クエリが必要です。次に、結果は数値ではなく文字列 (「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 に答える