下面的表格(为了简化起见,我只显示了表的一部分作为示例,而不是它们的所有内容):
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。最好举个例子..。考虑到上述情况,本案的结果将是:
idIns | DateIns
------+-----------
17400 | 2016-9-10
10100 | 2019-8-17发布于 2019-11-29 04:20:47
Aggregate和CASE将帮助您。
查询:
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输出:
| idIns | DateIns |
|-------|------------|
| 10100 | 2019-08-17 |
| 17400 | 2016-09-10 |更新查询:
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.idInsSQL Fiddle链接
https://stackoverflow.com/questions/59096730
复制相似问题