Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.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
Python 使用SQLite基于列值复制行_Python_Sqlite - Fatal编程技术网

Python 使用SQLite基于列值复制行

Python 使用SQLite基于列值复制行,python,sqlite,Python,Sqlite,使用SQLite,我需要将输入文件转换为输出文件,其中的行应该根据count列中的值进行复制 表格格式如下: # creating input database input_file = """ CREATE TABLE input_file ( dateid date NOT NULL , groupid NOT NULL, result INT NOT NULL, result_count INT NOT

使用SQLite,我需要将输入文件转换为输出文件,其中的行应该根据count列中的值进行复制

表格格式如下:

# creating input database
input_file = """
    CREATE TABLE input_file (
      dateid date NOT NULL ,
      groupid NOT NULL,
      result INT NOT NULL,
      result_count INT NOT NULL
    ) 
    """
# fresh table
cursor.execute("DROP TABLE IF EXISTS input_file")
cursor.execute(input_file)
我对SQL相当陌生,所以我需要关于使用哪些代码的帮助。下面是我正在看的前后两张照片


如果与另一个具有多个匹配行的表联接,则可以重复执行SELECT时输出的行。这只有在计数相对较小的情况下才可行。创建一个包含重复计数列的新表,该列包含1、2、2、3等。然后您可以:

SELECT * FROM input_file JOIN repeats ON result_count = repeat_count

您可以使用递归CTE执行此操作:

WITH cte AS (
  SELECT dateid, groupid, result, result_count, 1 counter
  FROM input_file
  UNION ALL
  SELECT dateid, groupid, result, result_count, counter + 1
  FROM cte 
  WHERE counter < result_count
)
SELECT dateid, groupid, result
FROM cte
然后插入行:

WITH cte AS (
  SELECT dateid, groupid, result, result_count, 1 counter
  FROM input_file
  UNION ALL
  SELECT dateid, groupid, result, result_count, counter + 1
  FROM cte 
  WHERE counter < result_count
)
INSERT INTO output_file(dateid, groupid, result)
SELECT dateid, groupid, result
FROM cte

请参阅。

谢谢标记。我已经编辑了我的问题以获取更多信息。你说另一个表有多个匹配行是什么意思?@Lara如果我的解释不清楚,我很抱歉。我的意思是一个包含一行值为1的表,两行值为2的表,等等。我现在可以看到,通过你所做的编辑,我的方法对你来说不实用。哦,好的,明白了。是的,如果我有大量的复制值要求,可能不可行。谢谢你
WITH cte AS (
  SELECT dateid, groupid, result, result_count, 1 counter
  FROM input_file
  UNION ALL
  SELECT dateid, groupid, result, result_count, counter + 1
  FROM cte 
  WHERE counter < result_count
)
INSERT INTO output_file(dateid, groupid, result)
SELECT dateid, groupid, result
FROM cte