首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据另一表中另一列的内容更新表列

根据另一表中另一列的内容更新表列
EN

Stack Overflow用户
提问于 2019-11-28 22:17:18
回答 1查看 50关注 0票数 1

下面的表格(为了简化起见,我只显示了表的一部分作为示例,而不是它们的所有内容):

代码语言:javascript
复制
CREATE TABLE InstArtRel
(
    id INT IDENTITY(1, 1) NOT NULL,
    idIns INT,
    ExpDateRev DATE,
    codArticle NVARCHAR(4),

    PRIMARY KEY (id)
);

INSERT INTO InstArtRel (idIns, ExpDateRev, codArticle) 
VALUES (17400, datefromparts(2018, 10, 1), 'X509'),
       (17400, datefromparts(2020, 12, 2), 'X529'),
       (17400, datefromparts(2016, 9, 10), 'T579'),
       (17400, datefromparts(2017, 6, 7), 'Z669'),
       (10100, datefromparts(2019, 8, 17), 'TG09'),
       (10100, datefromparts(2018, 3, 28), 'TG09'),
       (10100, datefromparts(2018, 4, 24), 'TG09'),
       (10100, datefromparts(2016, 7, 12), 'TG09');        


CREATE TABLE Installations 
(
    idIns INT NOT NULL,
    DateIns DATETIME,

    PRIMARY KEY (idIns)
);       

INSERT INTO Installations (idIns, DateIns)
VALUES (17400, '2020-12-01'),
       (10100, '2022-05-07');    

对于表安装中的每个idIns,我需要根据以下假设用InstArtRel表中的ExpDateRev列更新其DateIns列:

  • 如果codArticle表中IdIns的所有DateIns列值都是相同的,那么表Installations中的DateIns列将被更新为相应的idIns,其最大值为ExpDateRev
  • 否则,如果对于codArticle表中的IdIns,所有的DateIns列值都不是相同的,那么表Installations中的DateIns列将被更新为相应的idIns,其最小值为ExpDateRev

最好举个例子..。考虑到上述情况,本案的结果将是:

代码语言:javascript
复制
idIns | DateIns
------+-----------
17400 | 2016-9-10
10100 | 2019-8-17
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-29 04:20:47

AggregateCASE将帮助您。

查询:

代码语言:javascript
复制
SELECT idIns,CASE WHEN COUNT(DISTINCT codArticle) = 1 THEN MAX(ExpDateRev)
            WHEN COUNT(DISTINCT codArticle) != 1 THEN MIN(ExpDateRev) END DateIns
FROM InstArtRel
GROUP BY idIns

输出:

代码语言:javascript
复制
| idIns |    DateIns |
|-------|------------|
| 10100 | 2019-08-17 |
| 17400 | 2016-09-10 |

更新查询:

代码语言:javascript
复制
UPDATE I
SET I.DateIns = R.DateIns
FROM Installations I
JOIN (
    SELECT idIns,CASE WHEN COUNT(DISTINCT codArticle) = 1 THEN MAX(ExpDateRev)
                WHEN COUNT(DISTINCT codArticle) != 1 THEN MIN(ExpDateRev) END DateIns
    FROM InstArtRel
    GROUP BY idIns
     )R ON R.idIns = I.idIns

SQL Fiddle链接

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

https://stackoverflow.com/questions/59096730

复制
相关文章

相似问题

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