2012-07-17 191 views
0

增加我需要在SQL dinamically創建一個新列根據某些條件新選擇列根據條件在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或列3 = NULL

的一句話會是這樣的:

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

我不知道這是否可能,或者如果這是在效率方面面對此問題的正確方法。其他的可能性是用java或Jasper Reports做的,但我認爲SQL是最簡單的方法。

任何建議是值得歡迎的。

謝謝

+0

什麼數據庫引擎? – 2012-07-17 11:29:10

+0

數據庫引擎:MySQL 5.5.24 – R5498 2012-07-17 11:31:54

回答

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作爲幫手。

+0

'CASE'語句中的條件應該使用'OR'而不是'AND',因爲他們希望計數器在前三列中的任何一列不爲空時遞增,而不是在所有他們不是空的。 – 2012-07-17 11:36:37

+0

你說得對。更正它。 – 2012-07-17 11:39:09

+0

工程就像一個魅力,謝謝你:) – R5498 2012-07-17 11:57:26

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