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

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

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

我想要将第二个表格的字段合并到第一个表格中。我应该如何最好地做到这一点?我正在尝试以下操作:

  1. INSERT INTO table 1 (FILE_DATE, cat_1, cat_2,cat_3)
  2. SELECT DATE,
  3. CASE WHEN cat_type = 2 THEN cat_count ELSE 0 END AS cat_1,
  4. CASE WHEN cat_type = 2 THEN 0 ELSE cat_count END AS cat_2,
  5. CASE WHEN cat_type = 3 THEN cat_count ELSE 0 END AS cat_3
  6. 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

  1. INSERT INTO table 1 (FILE_DATE, cat_1, cat_2,cat_3)
  2. FROM
  3. (SELECT DATE,
  4. CASE WHEN cat_type = 2 THEN 'INSERT CAT_COUNT INTO CAT_2)
  5. END
  6. FROM TABLE_2)

答案1

得分: 0

以下是翻译好的部分:

基本上,您需要透视 Table2,然后插入。

类似这样... FIDDLE

  1. INSERT INTO Table1 (File_date, cat_1, cat_2, cat_3)
  2. SELECT File_date
  3. , SUM(CASE WHEN cat_type = 1 THEN cat_count ELSE NULL END) AS cat_1
  4. , SUM(CASE WHEN cat_type = 2 THEN cat_count ELSE NULL END) AS cat_2
  5. , SUM(CASE WHEN cat_type = 3 THEN cat_count ELSE NULL END) AS cat_3
  6. FROM Table2
  7. GROUP BY File_date
  8. SELECT * FROM TABLE1
英文:

Basically you need to pivot table2 and then insert.

Something like this... FIDDLE

  1. INSERT INTO Table1 (File_date, cat_1, cat_2, cat_3)
  2. SELECT File_date
  3. , SUM(CASE WHEN cat_type = 1 THEN cat_count ELSE NULL END) AS cat_1
  4. , SUM(CASE WHEN cat_type = 2 THEN cat_count ELSE NULL END) AS cat_2
  5. , SUM(CASE WHEN cat_type = 3 THEN cat_count ELSE NULL END) AS cat_3
  6. FROM Table2
  7. GROUP BY File_date
  8. SELECT * FROM TABLE1

答案2

得分: 0

您可以使用Pivot来解决问题。

您可以轻松地在Pivot中更改cat_?列表

  1. 插入到T1
  2. tdatecat_1cat_2cat_3
  3. 选择
  4. tdate
  5. ,[1]作为cat_1
  6. ,[2]作为cat_2
  7. ,[3]作为cat_3
  8. (
  9. 选择
  10. tdate
  11. cat_type
  12. cat_count
  13. T2
  14. ) t
  15. Pivot(
  16. sum(cat_count)
  17. cat_type (
  18. [1],
  19. [2],
  20. [3] )
  21. ) 作为pivot_table;

您可以使用以下语句创建插入基础数据:

  1. 如果存在则删除表T1
  2. 创建表T1tdate DATEcat_1 INTcat_2 INTcat_3 INT
  3. 如果存在则删除表T2
  4. 创建表T2tdate DATEcat_type INTcat_count INT
  5. 将值插入到T2中('2020-01-04'21
  6. 将值插入到T2中('2020-01-04'32);
  7. 将值插入到T2中('2020-01-05'32);
英文:

You can use Pivot to solve the problem

you can easy change List cat_? in pivot

  1. insert into T1
  2. (tdate,cat_1,cat_2,cat_3)
  3. SELECT
  4. tdate
  5. ,[1] as cat_1
  6. ,[2] as cat_2
  7. ,[3] as cat_3
  8. FROM
  9. (
  10. SELECT
  11. tdate,
  12. cat_type,
  13. cat_count
  14. FROM
  15. T2
  16. ) t
  17. PIVOT(
  18. sum(cat_count)
  19. FOR cat_type IN (
  20. [1],
  21. [2],
  22. [3] )
  23. ) AS pivot_table;

You can create insert base data with the following statements:

  1. drop table if exists T1
  2. CREATE TABLE T1 ( tdate DATE, cat_1 INT, cat_2 INT, cat_3 INT)
  3. drop table if exists T2
  4. CREATE TABLE T2 (tdate DATE, cat_type INT, cat_count INT)
  5. INSERT INTO T2 VALUES ('2020-01-04', 2, 1)
  6. INSERT INTO T2 VALUES ('2020-01-04', 3, 2);
  7. 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:

确定