如何管理NULL以重塑SQL Server 2012中的数据

时间:2015-12-17 22:07:16

标签: sql-server tsql

我在表格中有数据,如图中较大的表所示。 我想通过管理NULL并创建小表来重塑它,如图所示。 任何建议都将不胜感激。

enter image description here

2 个答案:

答案 0 :(得分:0)

坦率地说,你的结构没有有效的方法。没有什么可以将记录链接在一起并知道哪些记录真正属于一起。没有业务规则,连接是随机的,因此是可疑的。

另外请记住,您无法分辨在此表结构中输入记录的顺序,因此您无法假设您在ICD 10中看到的第一条记录属于您查看的第一条记录对于ICD9。并且是否会出现只有两个记录中的一个或另一个的记录问题?你将如何处理这个?

是的,我可以编写一个查询来获取您要求的结果,但结果在任何想象中都不正确。如果不重新设计数据库,就无法完成此任务。

答案 1 :(得分:-1)

我会用perl中的哈希来做。您将需要更改数据库 访问MSSQL,在我下面的例子中使用我自己的MySQL数据库抽象模块。但你应该得到基本的想法。 现在你的例子对于Ruleid或Shortdesc没有任何不同的值, 因此,如果源表中有不同的值,则需要对其进行修改 因为它没有考虑到这一点

 my(%DATA);
 my($count)=0;
 $DB->OpenQuery("SELECT Ruleid,Shortdesc,'ICD-10' FROM SOURCETABLE WHERE 'ICD-9' is NULL ORDER BY <WHATEVER YOU DID>");
 while(my($r,$s,$i) = $DB->FetchRow())
 {
    $count++;
    $DATA{$count}{'Ruleid'}=$r;
    $DATA{$count}{'Shortdesc'}=$s;
    $DATA{$count}{'ICD-10'}=$i;
 }
 $DB->CloseQuery();

 $count=0;
 $DB->OpenQuery("SELECT 'ICD-9' FROM SOURCETABLE WHERE 'ICD-10' IS NULL ORDER BY <WHATEVER YOU DID>");
 while(my($i) = $DB->FetchRow())
 {
    $count++;
    $DATA{$count}{'ICD-9'}=$i;
 }
 $DB->CloseQuery();

 foreach my $k (sort { $a <=> $b } keys(%DATA))
 {
    $DB->Do("INSERT INTO NEWTABLE SET Ruleid=?,Shortdesc=?,'ICD-9'=?,'ICD-10'=?",$DATA{$k}{'Ruleid'},$DATA{$k}{'Shortdesc'},$DATA{$k}{'ICD-9'},$DATA{$k}{'ICD-10'});
 }