Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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更新查询_Sql - Fatal编程技术网

此异常记录的SQL更新查询

此异常记录的SQL更新查询,sql,Sql,我需要一些解决这个问题的建议 例如tblStudent ID SNUM Name Grade 1 ST01 2 ST02 3 ST03 4 ST04 5 Simon 6 Kim 7 Jessica 8 Dale 9 12 10 11

我需要一些解决这个问题的建议

例如
tblStudent

ID      SNUM   Name    Grade
1       ST01
2       ST02
3       ST03
4       ST04
5              Simon
6              Kim    
7              Jessica
8              Dale
9                       12
10                      11
11                      11
12                      10
等等。。。模式很明显。。。我需要对其自己的表进行更新查询,或者对一个新表进行插入查询,看起来像

ID      SNUM   Name    Grade
1       ST01   Simon   12
2       ST02   Kim     11
3       ST03   Jessica 11
4       ST04   Dale    10

有人能给我指出一个解决这个问题的方向吗

要获得所需的结果集,请尝试

    select t1.id
         , t1.SNUM
         , t2.name
         , t3.grade
      from (
                select count(*) cnt
                  from tblStudent tagg
                 where tagg.SNUM is not null
           ) agg
cross join tblStudent   t1
      join tblStudent   t2  on ( t2.id = t1.id + agg.cnt )
      join tblStudent   t3  on ( t3.id = t2.id + agg.cnt )
     where t1.SNUM   IS NOT NULL
       and t2.name   IS NOT NULL
       and t3.grade  IS NOT NULL
         ;
说明: 基本上,sql首先统计目标记录的数量,并将原始表拆分为3个部分。这些数据被连接起来,从每一个数据中提取部分信息以建立完整的记录

此方案假设每个相关表格中给定偏移量处的数据属于同一实体

考虑到这个假设,连接条件可以将目标记录的数量作为偏移量引用

如果需要,可以添加更多测试(例如,
tblStudent
中的部分大小相同,每个部分中正好有一列不为空,没有一列包含超过一个部分的非空值)


已在oracle 12上测试(但应能在所有sql引擎上运行)。

为了获得所需的结果集,请尝试

    select t1.id
         , t1.SNUM
         , t2.name
         , t3.grade
      from (
                select count(*) cnt
                  from tblStudent tagg
                 where tagg.SNUM is not null
           ) agg
cross join tblStudent   t1
      join tblStudent   t2  on ( t2.id = t1.id + agg.cnt )
      join tblStudent   t3  on ( t3.id = t2.id + agg.cnt )
     where t1.SNUM   IS NOT NULL
       and t2.name   IS NOT NULL
       and t3.grade  IS NOT NULL
         ;
说明: 基本上,sql首先统计目标记录的数量,并将原始表拆分为3个部分。这些数据被连接起来,从每一个数据中提取部分信息以建立完整的记录

此方案假设每个相关表格中给定偏移量处的数据属于同一实体

考虑到这个假设,连接条件可以将目标记录的数量作为偏移量引用

如果需要,可以添加更多测试(例如,
tblStudent
中的部分大小相同,每个部分中正好有一列不为空,没有一列包含超过一个部分的非空值)


已在oracle 12上测试(但应能在所有sql引擎上运行)。

为了获得所需的结果集,请尝试

    select t1.id
         , t1.SNUM
         , t2.name
         , t3.grade
      from (
                select count(*) cnt
                  from tblStudent tagg
                 where tagg.SNUM is not null
           ) agg
cross join tblStudent   t1
      join tblStudent   t2  on ( t2.id = t1.id + agg.cnt )
      join tblStudent   t3  on ( t3.id = t2.id + agg.cnt )
     where t1.SNUM   IS NOT NULL
       and t2.name   IS NOT NULL
       and t3.grade  IS NOT NULL
         ;
说明: 基本上,sql首先统计目标记录的数量,并将原始表拆分为3个部分。这些数据被连接起来,从每一个数据中提取部分信息以建立完整的记录

此方案假设每个相关表格中给定偏移量处的数据属于同一实体

考虑到这个假设,连接条件可以将目标记录的数量作为偏移量引用

如果需要,可以添加更多测试(例如,
tblStudent
中的部分大小相同,每个部分中正好有一列不为空,没有一列包含超过一个部分的非空值)


已在oracle 12上测试(但应能在所有sql引擎上运行)。

为了获得所需的结果集,请尝试

    select t1.id
         , t1.SNUM
         , t2.name
         , t3.grade
      from (
                select count(*) cnt
                  from tblStudent tagg
                 where tagg.SNUM is not null
           ) agg
cross join tblStudent   t1
      join tblStudent   t2  on ( t2.id = t1.id + agg.cnt )
      join tblStudent   t3  on ( t3.id = t2.id + agg.cnt )
     where t1.SNUM   IS NOT NULL
       and t2.name   IS NOT NULL
       and t3.grade  IS NOT NULL
         ;
说明: 基本上,sql首先统计目标记录的数量,并将原始表拆分为3个部分。这些数据被连接起来,从每一个数据中提取部分信息以建立完整的记录

此方案假设每个相关表格中给定偏移量处的数据属于同一实体

考虑到这个假设,连接条件可以将目标记录的数量作为偏移量引用

如果需要,可以添加更多测试(例如,
tblStudent
中的部分大小相同,每个部分中正好有一列不为空,没有一列包含超过一个部分的非空值)


在oracle 12上测试(但应能在所有sql引擎上运行)。

如果您是2012年的用户,您可以:

;WITH cte AS (
  SELECT ID
        ,SNUM
        ,LEAD(Name,a.ct,NULL) OVER (ORDER BY ID) Name
        ,LEAD(Grade,a.ct * 2,NULL) OVER (ORDER BY ID) Grade
    FROM Student
         CROSS APPLY
         (SELECT COUNT(1) ct FROM Student WHERE Name IS NOT NULL) a
) 
SELECT * 
  FROM cte 
 WHERE Name IS NOT NULL

如果你是2012年,你可以做:

;WITH cte AS (
  SELECT ID
        ,SNUM
        ,LEAD(Name,a.ct,NULL) OVER (ORDER BY ID) Name
        ,LEAD(Grade,a.ct * 2,NULL) OVER (ORDER BY ID) Grade
    FROM Student
         CROSS APPLY
         (SELECT COUNT(1) ct FROM Student WHERE Name IS NOT NULL) a
) 
SELECT * 
  FROM cte 
 WHERE Name IS NOT NULL

如果你是2012年,你可以做:

;WITH cte AS (
  SELECT ID
        ,SNUM
        ,LEAD(Name,a.ct,NULL) OVER (ORDER BY ID) Name
        ,LEAD(Grade,a.ct * 2,NULL) OVER (ORDER BY ID) Grade
    FROM Student
         CROSS APPLY
         (SELECT COUNT(1) ct FROM Student WHERE Name IS NOT NULL) a
) 
SELECT * 
  FROM cte 
 WHERE Name IS NOT NULL

如果你是2012年,你可以做:

;WITH cte AS (
  SELECT ID
        ,SNUM
        ,LEAD(Name,a.ct,NULL) OVER (ORDER BY ID) Name
        ,LEAD(Grade,a.ct * 2,NULL) OVER (ORDER BY ID) Grade
    FROM Student
         CROSS APPLY
         (SELECT COUNT(1) ct FROM Student WHERE Name IS NOT NULL) a
) 
SELECT * 
  FROM cte 
 WHERE Name IS NOT NULL


您使用的是什么关系型数据库MySQL、sql server或其他版本?sql server哪个版本?sql server 2008 Express您使用的是什么关系型数据库MySQL、sql server或其他版本?sql server哪个版本?sql server 2008 Express您使用的是什么关系型数据库MySQL,sql server或其他版本?sql server哪个版本?sql server 2008 Express您使用的是什么RDBMS MySQL、sql server或其他版本?sql server哪个版本?sql server 2008 Express嗯,谢谢您的回答,您能解释一下吗?因为在sqlfiddle中,我在“on子句”中得到了一个错误未知列“agg.cnt”:选择t1.ID,t1.SNUM,t2.NAME,t3.GRADE from table_NAME t1 join table_NAME t2 on(t2.ID=t1.ID+agg.cnt)join table_NAME t3 on(t3.ID=t2.ID+agg.cnt)交叉连接(从table_NAME tagg中选择count(*)cnt,其中tagg.SNUM不为空)agg其中t1.SNUM不为NULL,t2.NAME不为NULL,t3.GRADE不为NULL我更正了导致语法错误的语句中基表的顺序。对于给您带来的不便,我深表歉意。无需道歉,我应该感谢您的帮助:)在SQLFIDLE中,您的select语句似乎没有得到任何结果。请看一看,空字符串不是
null
值!调整insert语句后。查询产生了预期的结果()@user1618180:您的fiddle设置为在MySQL中运行。嗯,谢谢您的回答,您能解释一下吗,因为在sqlfiddle中,我在“on子句”中得到了一个错误未知的列“agg.cnt”:从表_NAME t1 join table_NAME t2 on中选择t1.ID、t1.SNUM、t2.NAME、t3.GRADE(t2.ID=t1.ID+agg.cnt)(t3.ID=t2.ID+agg.cnt)交叉联接上的联接表_name t3(从表_name tagg中选择count(*)cnt,其中tagg.SNUM不为null)agg,其中t1.SNUM不为null,t2.name不为null,t3.GRADE不为null我更正了导致语法错误的语句中基表的顺序。对于给您带来的不便,我深表歉意。无需道歉,我应该感谢您的帮助:)在SQLFIDLE中,您的select语句似乎没有得到任何结果。请看一看,空字符串不是
null
值!调整insert语句后。查询生成预期结果()@user1618180:fiddle设置为在MySQL.U中运行