[SQL ] 請問一下該如何統計一筆資料null值欄位 …
各位好,使用的資料庫是MS SQL 2005
現在想統計每一筆資料有多少百分比的缺漏欄位,
資料形式如下:
BAN COMPANY_NAME YYYYMM CURRENT_ASSETS
======== ============ ======= ==============
xxxxxxxx 太平洋 2004/12 7292833
xxxxxxxx 太平洋 2005/12 6853064
xxxxxxxx 太平洋 2006/06 null
xxxxxxxx 太平洋 2006/06 4964290
此張表原則上要以為BAN + YYYYMM做為key
但因資料來源不保證不會重複,
所以現在去除重複資料的方式是統計每一筆record擁有最多null field的去除掉
假設像上面是四個欄位的話,第三筆資料的null field比率是25% (=1/4)就會被去掉
但是沒找到SQL中有這種橫向的統計方式(有沒有count_row這種函數啊...),
本來想轉成直的,再用count統計,但因為key重複,統計出來後卻會不知道要刪哪一筆
現在又想到要以暴力法的方式(使用巢狀回圈去統計)
但是這樣很沒效率,是否較快速且比較精簡的方式統計欄位呢?
自問自答...但不是解的很好看,其實就是暴力法...
declare
@strColumn varchar(max),
@intTotalColumn int,
@strTableName varchar(50),
@strSelectSQL varchar(max)
select @strColumn = '', @intTotalColumn = 0, @strTableName = 'myTable'
DECLARE cur_syscolumns cursor
for
select
sysobjects.name as Table_name
,syscolumns.id
,syscolumns.name as Field_name
,systypes.name as Type_name
,syscolumns.prec
,syscolumns.length as length
,syscolumns.isnullable as isnullable
from syscolumns
left outer join systypes on syscolumns.xtype = systypes.xtype
left outer join sysobjects on sysobjects.id = syscolumns.id
where
sysobjects.name in (@strTableName) and
systypes.name <> 'sysname'
order by
sysobjects.name, colid
open cur_syscolumns
DECLARE
@Table_name varchar(50),
@id int,
@Field_name varchar(50),
@Type_name varchar(50),
@prec int,
@length int,
@isnullable int
FETCH NEXT FROM cur_syscolumns
into
@Table_name,
@id,
@Field_name,
@Type_name,
@prec,
@length,
@isnullable
while (@@fetch_status = 0)
begin
set @strColumn = @strColumn + 'case when ' + @Field_name +
' is null then 0.0 else 1.0 end + '
set @intTotalColumn = @intTotalColumn + 1
FETCH NEXT FROM cur_syscolumns
into
@Table_name,
@id,
@Field_name,
@Type_name,
@prec,
@length,
@isnullable
end
close cur_syscolumns
deallocate cur_syscolumns
set @strColumn = @strColumn + '0 as Not_Null_Columns'
--print(@strColumn)
set @strSelectSQL = 'select ' + @strColumn + ', ' + convert(varchar(max),
@intTotalColumn) + ' as TotalColumn, * from ' +
@strTableName
--print(@strSelectSQL)
exec('select Not_Null_Columns/TotalColumn as Not_Null_Percent, * from (' +
@strSelectSQL + ') as a')
※ 編輯: Laviathan 來自: 114.45.17.32 (09/23 22:41)
※ 編輯: Laviathan 來自: 114.45.17.32 (09/23 22:47)
→
09/29 11:33, , 1F
09/29 11:33, 1F