小白求教个SQL语句

bj200808123456789 2018-04-12 06:32:36
SQL有两张表单,用什么语句能实现将图一的字段DM的每条值复制图二字断DM值等于001的KMDM字段值。形成图三表(图二和图二是同一张表,图三是图二表追加填充值得到的),ID要以增序方式新增





...全文
1635 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_37921165 2018-06-08
  • 打赏
  • 举报
回复
DELETE  FROM A2  WHERE A2.DM != '001'
INSERT into A2 (ID,DM,bm)
SELECT ROW_NUMBER() OVER (ORDER BY A1.DM) AS ID,
A1.DM,
a2.bm
FROM (SELECT * from A2 WHERE A2.DM ='001') as a2 ,A1 a1 WHERE a1.DM != a2.DM

SELECT * FROM A2 a2 ORDER BY a2.DM , a2.ID
bj200808123456789 2018-04-25
  • 打赏
  • 举报
回复
算了,还是我自己用笨办法解决,不过请教了知道要用到左右关联!!新学了一下 delete from z_projkm where dm <> '001' -- 删除项目、科目对应表dm不等001的对应,为做标准对应表做准备 drop table ta --删除ta表 CREATE TABLE ta(ID int IDENTITY(1,1),dm varchar(60),kmdm varchar(20)) --创建ta表 insert into ta(dm,kmdm) select z_items.dm,kmdm from z_projkm cross join z_items --将生成的项目、科目对应表导入ta表 delete from z_projkm --删除原项目、科目对应表 INSERT INTO z_projkm SELECT * FROM ta --将ta表导入项目、科目对应表 drop table ta --删除ta表
bj200808123456789 2018-04-19
  • 打赏
  • 举报
回复
引用 8 楼 zengertao 的回复:
[quote=引用 7 楼 bj200808123456789 的回复:] [quote=引用 3 楼 qq_26614115 的回复:] Create table TA (DM varchar(10),mc varchar(20)) Create table TB (id int,DM varchar(10),bm varchar(20)) insert into TA values('001','北京'),('002','南京'),('003','上海') insert into TB values(1,'001','A'),(2,'001','B'),(3,'001','C') select ROW_NUMBER() OVER(ORDER BY TA.DM) AS ID,TA.DM,TB.BM from TA CROSS JOIN TB ORDER BY TA.DM
不是我想要的结果,可能我的想法用语句没法现。 如果我的('001','北京'),('002','南京'),('003','上海')这个不止这三个有200个呢,我不是200个都要写进去。 我只是想select出A2表DM=001的bm 然后追加插入到A2表,并把刚插入的DM替换成A1表的第二条dm值,然后再追加插入一次,并把刚插入的DM替换成A1表的第三条dm值,如此循环,A1表Dm有几行就插入规制几次!![/quote] 别人只是用测试数据举个例子,你自己要理解下把自己的正式表带进去就好了。[/quote] 好吧!我知道了,谁叫我是小白呢!! Create table TA (DM varchar(10),mc varchar(20)) Create table TB (id int,DM varchar(10),bm varchar(20)) insert into TA values('001','北京'),('002','南京'),('003','上海') insert into TB values(1,'001','A'),(2,'001','B'),(3,'001','C') 这四条是生成测试数据数据 select ROW_NUMBER() OVER(ORDER BY TA.DM) AS ID,TA.DM,TB.BM from TA CROSS JOIN TB ORDER BY TA.DM 这条才是执行语句,但问题来了SQL2000 不支持ROW_NUMBER() 函数
繁花尽流年 2018-04-19
  • 打赏
  • 举报
回复
引用 7 楼 bj200808123456789 的回复:
[quote=引用 3 楼 qq_26614115 的回复:] Create table TA (DM varchar(10),mc varchar(20)) Create table TB (id int,DM varchar(10),bm varchar(20)) insert into TA values('001','北京'),('002','南京'),('003','上海') insert into TB values(1,'001','A'),(2,'001','B'),(3,'001','C') select ROW_NUMBER() OVER(ORDER BY TA.DM) AS ID,TA.DM,TB.BM from TA CROSS JOIN TB ORDER BY TA.DM
不是我想要的结果,可能我的想法用语句没法现。 如果我的('001','北京'),('002','南京'),('003','上海')这个不止这三个有200个呢,我不是200个都要写进去。 我只是想select出A2表DM=001的bm 然后追加插入到A2表,并把刚插入的DM替换成A1表的第二条dm值,然后再追加插入一次,并把刚插入的DM替换成A1表的第三条dm值,如此循环,A1表Dm有几行就插入规制几次!![/quote] 别人只是用测试数据举个例子,你自己要理解下把自己的正式表带进去就好了。
bj200808123456789 2018-04-19
  • 打赏
  • 举报
回复
引用 3 楼 qq_26614115 的回复:
Create table TA (DM varchar(10),mc varchar(20)) Create table TB (id int,DM varchar(10),bm varchar(20)) insert into TA values('001','北京'),('002','南京'),('003','上海') insert into TB values(1,'001','A'),(2,'001','B'),(3,'001','C') select ROW_NUMBER() OVER(ORDER BY TA.DM) AS ID,TA.DM,TB.BM from TA CROSS JOIN TB ORDER BY TA.DM
不是我想要的结果,可能我的想法用语句没法现。 如果我的('001','北京'),('002','南京'),('003','上海')这个不止这三个有200个呢,我不是200个都要写进去。 我只是想select出A2表DM=001的bm 然后追加插入到A2表,并把刚插入的DM替换成A1表的第二条dm值,然后再追加插入一次,并把刚插入的DM替换成A1表的第三条dm值,如此循环,A1表Dm有几行就插入规制几次!!
二月十六 2018-04-18
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#A1') is null
drop table #A1
Go
Create table #A1([DM] nvarchar(23),[mc] nvarchar(22))
Insert #A1
select N'001',N'北京' union all
select N'002',N'南京' union all
select N'003',N'上海'
GO
if not object_id(N'Tempdb..#A2') is null
drop table #A2
Go
Create table #A2([ID] int,[dm] nvarchar(23),[bm] nvarchar(21))
Insert #A2
select 1,N'001',N'A' union all
select 2,N'001',N'B' union all
select 3,N'001',N'C'
Go
--测试数据结束
SELECT ROW_NUMBER() OVER (ORDER BY #A1.DM) AS ID,
#A1.DM,
bm
FROM #A1,
#A2;


吉普赛的歌 2018-04-17
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('A1') IS NOT NULL DROP TABLE A1
IF OBJECT_ID('A2') IS NOT NULL DROP TABLE A2
GO
CREATE TABLE A1(DM VARCHAR(10),mc NVARCHAR(10))
CREATE TABLE A2(ID INT,DM VARCHAR(10),bm NVARCHAR(10))
GO
INSERT INTO A1 VALUES ('001','北京')
INSERT INTO A1 VALUES ('002','南京')
INSERT INTO A1 VALUES ('003','上海')
GO
INSERT INTO A2 VALUES (1, '001','A')
INSERT INTO A2 VALUES (2, '001','B')
INSERT INTO A2 VALUES (3, '001','C')
GO

SELECT a2.id,a1.dm,a2.bm 
FROM A1 CROSS JOIN A2 AS a2
ORDER BY a1.dm,a2.id
/*
id	dm	bm
1	001	A
2	001	B
3	001	C
1	002	A
2	002	B
3	002	C
1	003	A
2	003	B
3	003	C
*/
shildkix 2018-04-17
  • 打赏
  • 举报
回复
用corss join语句,corss join 是两张表的相乘的结果
蜗牛的路 2018-04-17
  • 打赏
  • 举报
回复
Create table TA (DM varchar(10),mc varchar(20))

Create table TB (id int,DM varchar(10),bm varchar(20))

insert into TA values('001','北京'),('002','南京'),('003','上海')

insert into TB values(1,'001','A'),(2,'001','B'),(3,'001','C')


select ROW_NUMBER() OVER(ORDER BY TA.DM) AS ID,TA.DM,TB.BM
from TA CROSS JOIN TB
ORDER BY TA.DM
二月十六 2018-04-13
  • 打赏
  • 举报
回复
没太看明白需求 复制图二字断DM值等于001的KMDM 这是更新的意思吧?更新DM值等于001的KMDM值。 ID要以增序方式新增 这是插入数据?
bj200808123456789 2018-04-13
  • 打赏
  • 举报
回复
插入数据 如A1表 DM mc 001 北京 002 南京 003 上海 A2表 ID dm bm 1 001 A 2 001 B 3 001 C 执行什么语句能在A2表中插入 ID dm bm 1 001 A 2 001 B 3 001 C 4 002 A 5 002 B 6 002 C 7 003 A 8 003 B 9 003 C 反正就是A1表里有dm有几条就插入几个!!

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧