4

したがって、現在、次のような1と0のテーブルを返すクエリがあります

1 0 0
1 1 0
0 0 1
0 1 1
1 1 0
1 1 1

ただし、複数の 1 を含む行の場合、行の最初の 1 のみを保持するようにクエリを変更したいと思います。たとえば、(1 1 1) を (1 0 0) に変換したり、(0 1 1) を (0 1 0) に変換したりします。IF ロジックは最後の手段のようです。

皆さんは何をお勧めしますか?ある列の値が別の列の値に依存するケースステートメントを実行できますか?

つまり、「COLUMN 2 = CASE WHEN COLUMN 1 = 1 and COLUMN 2 = 1, then 0...etc?」

4

2 に答える 2

2

3 つの列の場合、ロジックは次のようになります。

select col1,
       (case when col1 = 1 then 0 else col2 end) as col2,
       (case when col1 = 1 or col2 = 1 then 0 else col3 end) as col3
from query q

より多くの列がある場合は、別のアプローチをとります。

select col1,
       (case when firstOne < 2 then 0 else col2 end) as col2,
       (case when firstOne < 3 then 0 else col3 end) as col3,
       (case when firstOne < 4 then 0 else col4 end) as col4,
       . . .
from (select q.*,
             (case when col1 = 1 then 1
                   when col2 = 1 then 2
                   when col3 = 1 then 3
                   . . .
              end) as FirstOne
      from query q
     ) q
于 2013-03-19T16:02:37.867 に答える
0

条件付き構文の代わりに、次のようなことを行うことができます。

select a, b * (1-a) as [b'], c * (1-b) * (1-a) as [c'] 
from your_table

これは、列a、b、およびcにそれぞれ値0と1のみが許可されているかどうかに依存します。

ここの例。)

于 2013-03-19T18:19:28.403 に答える