Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL数据分析过程_Sql Server_Database - Fatal编程技术网

Sql server SQL数据分析过程

Sql server SQL数据分析过程,sql-server,database,Sql Server,Database,我试图在SQL中执行一个过程,其中我有一个表,例如: 以前 记录|设置日期| A | B | C | D |总计|列ID 巴德| 20180320 | 0 | 6 | 3 | 0 | 9 BAV | 20180320 | 0 | 0 | 1 | 0 | 1 我想分析每一行,并根据列中的条目执行操作。因此,对于记录“BAD”,我想检查每列上的值。在这种情况下,列A=0因此移动到下一列。因此,对于B=6列,我需要在那里创建插入新行,拆分原始行,以便插入新行: 记录|设置日期| A | B | C |

我试图在SQL中执行一个过程,其中我有一个表,例如:

以前

记录|设置日期| A | B | C | D |总计|列ID 巴德| 20180320 | 0 | 6 | 3 | 0 | 9 BAV | 20180320 | 0 | 0 | 1 | 0 | 1

我想分析每一行,并根据列中的条目执行操作。因此,对于记录“BAD”,我想检查每列上的值。在这种情况下,列A=0因此移动到下一列。因此,对于B=6列,我需要在那里创建插入新行,拆分原始行,以便插入新行:

记录|设置日期| A | B | C | D |总计|列ID 巴德| 20180320 | 0 | 6 | 0 | 0 | 9 | B

这样做的最终结果如下所示:

最终结果

记录|设置日期| A | B | C | D |总计|列ID 巴德| 20180320 | 0 | 6 | 0 | 0 | 9 | B 巴德| 20180320 | 0 | 0 | 3 | 0 | 3 | C

BAV | 20180320 | 0 | 0 | 1 | 0 | 1 | C 密码:

for rows = 1 to x
   x = #rows in table
 set rows = 1

    for col = 1 to Ubound(col)
        if val <> 0 then 
           INSERT NEW ROW ( ROW with column entries set to zero expect populated 
                    row) AND columnid = non-zero row.

        else
        end if
    next col

next row
end

删除原始行-在这种情况下,将行拆分为两行。

相反,如果列固定为A、B、C和D,则可以进入循环 做一些下面提到的额外编码

INSERT INTO New_Row(RECORD,SETDATE,A,B,C,D,TOTAL,COLUMNID)
SELECT RECORD,SETDATE,A,0,0,0,A,'A'
FROM Your_Table
WHERE A<>0

INSERT INTO New_Row(RECORD,SETDATE,A,B,C,D,TOTAL,COLUMNID)
SELECT RECORD,SETDATE,0,B,0,0,B,'B'
FROM Your_Table
WHERE B<>0

INSERT INTO New_Row(RECORD,SETDATE,A,B,C,D,TOTAL,COLUMNID)
SELECT RECORD,SETDATE,0,0,C,0,C,'C'
FROM Your_Table
WHERE C<>0

INSERT INTO New_Row(RECORD,SETDATE,A,B,C,D,TOTAL,COLUMNID)
SELECT RECORD,SETDATE,0,0,0,D,D,'D'
FROM Your_Table
WHERE D<>0

嘿,谢谢shiv的建议,这解决了我想要实现的问题。非常感谢。过程代码是高度特定于供应商的-因此请添加一个标记来指定您使用的是mysql、postgresql、sql server、oracle还是db2-还是完全其他的。@marc_s我使用的是mssql,我是这方面的新手,但下面的建议可以解决我的问题。第一课:官方产品名称是SQL Server,而不是mssql或ms SQL之类的。当你提到这个产品时,你应该使用这个官方名称,不要用mysql标记,这是不同的RDBMS,而不是SQL Server。。。。。