0

特定の条件に応じて、カウンターを使用して SQL で動的に新しい列を作成する必要があります

すなわち

ID ||| COLUMN1 ||| COLUMN2 ||| COLUMN3 ||| COLUMN 4 |||NEW_COLUMN
1        null        null        null         12    
2         13         null        null         18           1
3        null        null        null         82            
4        null        null        null         81           
5        null        null        31           89           2
6        null        22          32           91           3
7        null        92          null         95           4

カウンターは、COLUMN1 または COLUMN2 または COLUMN 3 != null の場合にのみ増加します。

文は次のようになります。

SELECT COLUMN1,COLUMN2,COLUMN3,COLUMN4, (SELECT .....) FROM ... WHERE ...

それが可能かどうか、または効率の点でこの問題に対処する正しい方法であるかどうかはわかりません。他の可能性はJavaまたはJasper Reportsでそれを行うことですが、SQLがそれを行う最も簡単な方法だと思います

どんなアドバイスでも大歓迎です。

ありがとうございました

4

2 に答える 2

1
select t.*, (@row := case 
                     when column1 is not null or column2 is not null or column3 is not null 
                     then @row
                     else null
            end) as NEW_COLUMN,
            (@row := case 
                     when column1 is not null or column2 is not null or column3 is not null 
                     then @row + 1 
                     else @row 
            end) as TEMP_COLUMN
from your_table t, (select @row := 0) r

私はtemp_columnヘルパーとして使用しました。

于 2012-07-17T11:33:27.590 に答える
0

別の方法

select a.ID,a.COLUMN1,a.COLUMN2,a.COLUMN3,a.COLUMN4,COUNT(b.ID) from
(select * from <your_table> where coalesce(column1,column2,column3) is not null)a
join 
(select * from <your_table> where coalesce(column1,column2,column3) is not null)b
on a.ID>=b.ID
group by a.ID,a.COLUMN1,a.COLUMN2,a.COLUMN3,a.COLUMN4 
union all
select *,null from <your_table> where coalesce(column1,column2,column3) is null
order by id
于 2012-07-17T12:14:21.023 に答える