0

我需要根据某些条件在 SQL 中创建一个带有计数器的新列

IE

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

我用 atemp_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 回答