mysql 是否有SQL查询从另一列中的数据“创建”列

evrscar2  于 2023-10-15  发布在  Mysql
关注(0)|答案(2)|浏览(136)

我需要创建2个额外的数据列在同一个表中的另一列。i有一个名为Role的列,指定不同的角色,例如主管、行政人员等现在,我想为Supervisor和Administrator分别创建一个列,其中,客户端名称与示例附加的expected result相同

  1. ClientName Role Name
  2. A123 Supervisor Dave 1
  3. A123 Administrator Dave 2
  4. Q012 Supervisor Jane2
  5. Q012 Administrator Kent3
  6. Select *
  7. From contacts

我想从联系人表中获得以下内容

  1. ClientName Supervisor Administrator
  2. A123 Dave1 Dave2

expected result

icomxhvb

icomxhvb1#

创建两个新列Supervisor和Administrator,并运行两个查询,一个用于更新主管,如

  1. UPDATE table SET supervisor = name where role='supervisor'

第二步更新admin

  1. UPDATE table SET admin = name where role ='admin'
flvtvl50

flvtvl502#

如果你只需要数据检索,而不需要改变表结构,那么一个简单的条件聚合就可以了。
对于给定的数据示例,

  1. CREATE TABLE `contacts` (
  2. ClientName varchar(10),
  3. Role varchar(15),
  4. Name varchar(15)
  5. ) ;
  6. insert into contacts values ('A123','Supervisor','Dave1'),
  7. ('A123','Administrator','Dave2'), ('Q012','Supervisor','Jane2'),
  8. ('Q012','Administrator','Kent3');

查询

  1. select ClientName,
  2. max(case when role='Supervisor' then Name end) as Supervisor,
  3. max(case when role='Administrator' then Name end) as Administrator
  4. from contacts
  5. group by ClientName;

结果

  1. ClientName Supervisor Administrator
  2. A123 Dave1 Dave2
  3. Q012 Jane2 Kent3

如果您想更改表结构。使用单个事务创建一个临时表,将数据存储在临时表中,然后更改结构并将数据插入回主表。
我已经考虑到你正在使用InnoDB存储引擎。

  1. SET autocommit=0;
  2. LOCK TABLES contacts WRITE;
  3. ### Create a temporary table to insert the data from the main table
  4. create temporary table temp_myTable (
  5. ClientName varchar(10),
  6. Supervisor varchar(15),
  7. Administrator varchar(15)
  8. );
  9. ##### Insert unique data to the temporary table
  10. insert into temp_myTable
  11. select ClientName,
  12. max(case when role='Supervisor' then Name end) as Supervisor,
  13. max(case when role='Administrator' then Name end) as Administrator
  14. from contacts
  15. group by ClientName;
  16. ##### Delete all data from main table
  17. truncate contacts;
  18. #####Change contacts structure
  19. ALTER TABLE contacts
  20. drop column Role,
  21. drop column Name,
  22. add column Supervisor varchar(15),
  23. add column Administrator varchar(15);
  24. ###### Insert data to the main table
  25. INSERT INTO contacts SELECT * FROM temp_myTable;
  26. ########### Delete the created temprary table
  27. drop temporary table temp_myTable;
  28. COMMIT;
  29. UNLOCK TABLES;

See example

展开查看全部

相关问题