使用带有硬编码值的select插入值

时间:2015-04-09 14:03:55

标签: sql

我创建了一个表:

create table table1 
( 
    ID NOT NULL,
    NAME VARCHAR2(20) NOT NULL,
    dist1 NUMBER(5,3),
    dist2 NUMBER(5,3),
    dist3 NUMBER(5,3)
); 

表2:

select id, name from table 

数据:

ID(pk)  |   name(pk)
-------------------
  86       name1
  86       name2
  86       name3

以下是我尝试的查询。

INSERT INTO table1(ID, NAME, DIST1, DIST2, DIST3) 
   SELECT distinct customer_ref, plan_name 
   FROM table2

代表DIST1DIST2DIST3 - 以下值需要与table1ID一起插入name

name1  0.8    0.2    0
name2  1.1    1.2    3.4
name3  4.5    4.2    5.2    

任何人都可以帮我了解如何将值插入table1

2 个答案:

答案 0 :(得分:2)

作为SQL Server,如果您正在使用MYSQL,则根据需要转换数据类型

创建临时表以存储数据

Create table #Temptbl
(
    NAME VARCHAR(20) NOT NULL,
    dist1 decimal(5,3),
    dist2 decimal(5,3),
    dist3 decimal(5,3)
 )

insert into  #Temptbl values('name1',  0.8 ,   0.2,    0)
insert into  #Temptbl values('name2',  1.1,    1.2,    3.4)
insert into  #Temptbl values('name3',  4.5,    4.2,    5.2 )

现在,加入临时表和[table]以获取数据,并插入table1

INSERT INTO table1(ID, NAME, DIST1, DIST2, DIST3) 
select [table].ID,[table].NAME,#Temptbl.dist1,#Temptbl.dist2,#Temptbl.dist3
from [table] INNER JOIN #Temptbl ON [table].NAME = #Temptbl.NAME

现在,执行select * from [table1],您可以获得所需的结果

ID  NAME    dist1   dist2   dist3
86  name1   0.800   0.200   0.000
86  name2   1.100   1.200   3.400
86  name3   4.500   4.200   5.200

答案 1 :(得分:0)

你可以使用这样的case语句:

CASE name
    WHEN 'john' THEN 0.8
    WHEN 'mike' THEN 1.1
    WHEN 'steve' THEN 4.5
END AS dist1

见这里:http://sqlfiddle.com/#!9/4f267/1

根据您拥有的名称数量,这可能非常麻烦。如果您在电子表格中有一个名单列表,那么最好将数据导入表格然后进行连接。您可以使用类似MySQL' DATA INFILE'如果这是一次性的事情,你可以自动进行导入,也可以只使用工作台。