使用插入语句将两个表合并,以匹配精确的值插入到表1中。

huangapple go评论68阅读模式
英文:

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);

huangapple
  • 本文由 发表于 2023年4月19日 23:30:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/76056337.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定