首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从表中复制特定行

如何从表中复制特定行
EN

Stack Overflow用户
提问于 2022-10-20 11:49:29
回答 1查看 33关注 0票数 1

我有下表

代码语言:javascript
复制
CREATE TABLE DMS
(
KTOV char(10),
NDM int,
KOL decimal(13,2) NOT NULL,
CENA decimal(13,2) NOT NULL,
CONSTRAINT FK_KTOV FOREIGN KEY(KTOV)
REFERENCES TOV(KTOV),
CONSTRAINT FK_NDM FOREIGN KEY(NDM)
REFERENCES DMZ(NDM)
);

我用一些手写的数据填充了它

代码语言:javascript
复制
INSERT INTO DMS VALUES('101', 1, 20, 10.00, 'Light');
INSERT INTO DMS VALUES('102', 1, 10, 8.00, 'Dark');
INSERT INTO DMS VALUES('103', 1, 30, 5.00, 'Paprika');
INSERT INTO DMS VALUES('101', 2, 10, 6.00, 'Light');
INSERT INTO DMS VALUES('102', 3, 20, 8.00, 'Dark');

我正在尝试编写一个查询,以便在这个表中插入一个新行。我希望它以下一种方式工作:假设它是2对行,首先是NDM为MIN的行(在我的例子中是NDM = 1,3行),第二对是NDM是MAX的行(在我的例子中,NDM = 3,1行)。然后,我想检查第一对中是否有KTOV没有出现在第二对中的行(在我的例子中,这是两行,KTOV = 101,KTOV = 103)。然后,我想在表中插入这两行,从第一对复制它们的所有值,但NDM除外,它应该采用MAX NDM。

我试过

代码语言:javascript
复制
INSERT DMS(KTOV, NDM, KOL, CENA, SORT)
SELECT KTOV, a.NDM as NDM, KOL, CENA, SORT
FROM 
(SELECT 
MAX(NDM) AS NDM,
KTOV AS KTOV,
KOL AS KOL,
CENA AS CENA,
SORT AS SORT
FROM DMS) a
WHERE // I'm not sure how to continue;

作为执行的结果,它应该添加两个新行,类似于(因为'102‘KTOV出现在具有MAX NDM的行中)

代码语言:javascript
复制
INSERT INTO DMS VALUES('101', 3, 20, 10.00, 'Light');
INSERT INTO DMS VALUES('103', 3, 30, 5.00, 'Dark');

P.S:我要用它作为重新排序的功能

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-20 12:04:15

你可以这样做:

代码语言:javascript
复制
with mx as 
  (select * from DMS where NDM in (select max(NDM) from DMS)),
  mn as
  (select * from DMS where NDM in (select min(NDM) from DMS))
  insert into dms (KTOV,NDM,KOL,CENA,SORT)
select KTOV,NDM,KOL,CENA,SORT from mx where not exists (select * from mn where mn.KTOV = mx.KTOV)
union 
select KTOV,(select max(NDM) from DMS),KOL,CENA,SORT from mn where not exists (select * from mx where mn.KTOV = mx.KTOV);

DBFiddle演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74139390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档