Sql 使用带有硬编码值的“选择”插入值

Sql 使用带有硬编码值的“选择”插入值,sql,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 数据: 下面是我尝试过的问题 INSERT INTO table1(ID, NAME, DIST1, DIST2, DIST

我创建了一个表:

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 
数据:

下面是我尝试过的问题

INSERT INTO table1(ID, NAME, DIST1, DIST2, DIST3) 
   SELECT distinct customer_ref, plan_name 
   FROM table2
对于
DIST1
DIST2
DIST3
-需要将以下值与
ID
name
一起插入
表1

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

如果您使用的是MYSQL,那么可以根据需要转换数据类型,有人可以帮助我如何将值插入SQL Server的
表1

中吗

创建临时表以存储数据

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 )
现在,连接Temp Table和
[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
现在,从[表1]执行
select*,您可以得到所需的结果

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

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

CASE name
    WHEN 'john' THEN 0.8
    WHEN 'mike' THEN 1.1
    WHEN 'steve' THEN 4.5
END AS dist1
请看这里:


取决于你有多少名字,这可能会很麻烦。如果您在电子表格中有一个名称列表,那么最好将数据导入到表中,然后执行联接。您可以使用MySQL的“数据填充”之类的工具来自动导入,如果这是一次性的,您也可以使用工作台。

您希望在DIST1、DIST2、DIST3插入什么值?您好,您从哪里获取DIST值?它们在另一个表中吗?不,这些是硬编码的值,我没有使用任何表来获取我应该使用的表FORNAME1,0.8,0.2,0 name2-1.1 1.2 3.4,name3-4.5 4.2 5.2
CASE name
    WHEN 'john' THEN 0.8
    WHEN 'mike' THEN 1.1
    WHEN 'steve' THEN 4.5
END AS dist1