英文:
Merge two tables together using insert statement to match exact values into table 1
问题
以下是翻译好的内容:
我有两个表格,我正在尝试使用插入操作将它们合并到第一个表格中。
第一个表格字段:
| 日期 | cat_1 | cat_2 | cat_3 | 
|---|---|---|---|
| 2020-01-02 | 1 | 2 | 0 | 
| 2020-01-03 | 2 | 0 | 3 | 
第二个表格字段:
| 日期 | cat_type | cat_count | 
|---|---|---|
| 2020-01-04 | 2 | 1 | 
| 2020-01-04 | 3 | 2 | 
我想要将第二个表格的字段合并到第一个表格中。我应该如何最好地做到这一点?我正在尝试以下操作:
INSERT INTO table 1 (FILE_DATE, cat_1, cat_2,cat_3) 
SELECT DATE,
    CASE WHEN cat_type = 2 THEN cat_count ELSE 0 END AS cat_1,
    CASE WHEN cat_type = 2 THEN 0 ELSE cat_count END AS cat_2,
    CASE WHEN cat_type = 3 THEN cat_count ELSE 0 END AS cat_3
FROM TABLE_2;
英文:
I have two tables and I am trying to see how best to merge them into the first table using insert.
Table 1 Fields:
| date | cat_1 | cat_2 | cat_2 | 
|---|---|---|---|
| 2020-01-02 | 1 | 2 | 0 | 
| 2020-01-03 | 2 | 0 | 3 | 
Table 2 fields:
| date | cat_type | cat_count | 
|---|---|---|
| 2020-01-04 | 2 | 1 | 
| 2020-01-04 | 3 | 2 | 
I want to get the table 2 fields into table 1. How can I best do this? I am trying the following
INSERT INTO table 1 (FILE_DATE, cat_1, cat_2,cat_3) 
				FROM
				(SELECT DATE,
					CASE WHEN cat_type = 2 THEN 'INSERT CAT_COUNT INTO CAT_2)
					END
				FROM TABLE_2)
答案1
得分: 0
以下是翻译好的部分:
基本上,您需要透视 Table2,然后插入。
类似这样... FIDDLE
INSERT INTO Table1 (File_date, cat_1, cat_2, cat_3)  
SELECT File_date
      , SUM(CASE WHEN cat_type = 1 THEN cat_count ELSE NULL END) AS cat_1
      , SUM(CASE WHEN cat_type = 2 THEN cat_count ELSE NULL END) AS cat_2
      , SUM(CASE WHEN cat_type = 3 THEN cat_count ELSE NULL END) AS cat_3
   FROM Table2
GROUP BY File_date
SELECT * FROM TABLE1
英文:
Basically you need to pivot table2 and then insert.
Something like this... FIDDLE
INSERT INTO Table1 (File_date, cat_1, cat_2, cat_3)  
  SELECT File_date
        , SUM(CASE WHEN cat_type = 1 THEN cat_count ELSE NULL END) AS cat_1
        , SUM(CASE WHEN cat_type = 2 THEN cat_count ELSE NULL END) AS cat_2
        , SUM(CASE WHEN cat_type = 3 THEN cat_count ELSE NULL END) AS cat_3
     FROM Table2
 GROUP BY File_date
  
SELECT * FROM TABLE1
答案2
得分: 0
您可以使用Pivot来解决问题。
您可以轻松地在Pivot中更改cat_?列表
插入到T1
(tdate,cat_1,cat_2,cat_3)
选择
        tdate
       ,[1]作为cat_1
       ,[2]作为cat_2
       ,[3]作为cat_3  
从   
(
    选择
        tdate, 
        cat_type,
        cat_count
    从 
        T2
) t 
Pivot(
    sum(cat_count) 
    为 cat_type 在 (
        [1], 
        [2], 
        [3] )
) 作为pivot_table;
您可以使用以下语句创建插入基础数据:
如果存在则删除表T1
创建表T1(tdate DATE,cat_1 INT,cat_2 INT,cat_3 INT)
如果存在则删除表T2
创建表T2(tdate DATE,cat_type INT,cat_count INT)
将值插入到T2中('2020-01-04',2,1)
将值插入到T2中('2020-01-04',3,2);
将值插入到T2中('2020-01-05',3,2);
英文:
You can use Pivot to solve the problem
you can easy change List cat_? in pivot
insert into T1
(tdate,cat_1,cat_2,cat_3)
SELECT 
        tdate
	   ,[1] as cat_1
	   ,[2] as cat_2
	   ,[3] as cat_3  
FROM   
(
    SELECT 
        tdate, 
        cat_type,
		cat_count
    FROM 
        T2
) t 
PIVOT(
    sum(cat_count) 
    FOR cat_type IN (
        [1], 
        [2], 
        [3] )
) AS pivot_table;
You can create insert base data with the following statements:
drop table if exists  T1
CREATE TABLE T1 ( tdate DATE, cat_1 INT, cat_2 INT, cat_3 INT)
drop table if exists  T2
CREATE TABLE T2 (tdate DATE, cat_type INT, cat_count INT)
INSERT INTO T2 VALUES ('2020-01-04',      2,        1)
INSERT INTO T2 VALUES ('2020-01-04',      3,        2);
INSERT INTO T2 VALUES ('2020-01-05',      3,        2);
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论