2016-10-21 20 views
0

アイテムのセットを作成するには、すべてのアイテムを比較して、「共通」を持つアイテムを比較します。バイトフィールドに基づいてカラムを動的に選択

この小さな 'Something'は、ColumnNameとByteValueを格納するテーブルによって定義されます。どの列を比較する必要があるかを知るため。

絵は言葉以上のことをよく言うので、ここでは基本的なスケッチです。

ByteFieldの意義を格納表パラメータ:グリーンで

やコンパレータなどの列の組み合わせの使用例、比較として私たちを71与えては。

Table Parameter that store the ByteField Signification

表データ:比較と列の定義済みの組み合わせのためのベースとしての入力としてデータイドを取って、データIdのリストを返すクエリを作成する方法 enter image description here

?ここに71

この例では、DataID = 1とByte = 71に基づいて項目を設定します。期待される結果は1, 4, 5です。

ここはa sample of the databaseです。

私は「一度」噛まれていたので、私はあなたに仕事を依頼していません。私はいくつかのコードでそれを処理していますが、私はT-SQLでそれを行う方法を見てみたいと思います。だから私はサンプルテーブルを用意しました。

+1

これは*非常に秘密のデータ構造です。列名を使用して条件を直接識別しないのはなぜですか? –

+0

私はそれを得ることは確かではありませんが、実際これはexempleのためです。私はcompariisonで使用できる実際には23 Columnを持っています。製品にないユーザーによって異なります。 15 combinaisonは一般的に使われていますが、実際には他にもたくさんあります。 –

+0

。 。 SQLが非常に妥当な選択肢を提供するときに、列名を定義するのになぜビットバイディングを使用するのですか? –

答えて

2

テーブル「データ」の列と列「パラメータ」に定義されている値との間に不一致があります。


静的SQLでは、事前に列の名前を知る必要があります。

declare @compactor int = 71 
     ,@DataID int = 1 

select  * 
from 
     (select t.* 
       ,min (case "ID" when @DataID then 'Y' end) over (partition by rnk) as is_requested_row 
     from (select t.* 
         , rank() over 
          (
           order by case when @compactor/power(2,0) % 2 = 1 then "Color" end 
             ,case when @compactor/power(2,1) % 2 = 1 then "Type" end 
             ,case when @compactor/power(2,2) % 2 = 1 then "Type2" end 
             ,case when @compactor/power(2,3) % 2 = 1 then "Name" end 
             ,case when @compactor/power(2,4) % 2 = 1 then "Sci_name" end 
             -- ,case when @compactor/power(2,5) % 2 = 1 then "Alias"  end 
             ,case when @compactor/power(2,6) % 2 = 1 then "Version" end 
             -- ,case when @compactor/power(2,7) % 2 = 1 then "Firmware" end 
             -- ,case when @compactor/power(2,8) % 2 = 1 then "Brand"  end 
             -- ,case when @compactor/power(2,9) % 2 = 1 then "Avaidable" end 
          ) as rnk 
        from "Data" as t 
       ) t 
     ) t 
where is_requested_row = 'Y' 
order by "ID" ; 
+0

ミスマッチどこ? –

+0

「パラメータ」テーブルに「エイリアス」、「ファームウェア」、「Avaidable」が定義されていますが、「データ」テーブルの列ではありません –

+0

なぜ私は「すべて表示されていません」というコメントを追加します。それらを例文で選択する。しかし私は私が私がピクチャをokに見せるためにデータを単純化することを意味するものを見ます。ある人が私の標本を使用すると、エラーが発生する可能性があります。うん、私の悪い。私はSQLスクリプトを更新します。 –

関連する問題