我有下面的表格(为简化起见,我仅显示其中一部分表格作为示例,而不是全部内容):
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');
对于表“安装”中的每个idIn,我需要根据以下假设,用DateIns
表中的ExpDateRev
列更新其InstArtRel
列:
如果codArticle
表中IdIns
的所有InstArtRel
列值都相同,则表DateIns
中的Installations
列将被更新对应的idIns
的最大值为ExpDateRev
。
否则,如果codArticle
表中的IdIns
的所有InstArtRel
列值都不相同,则表{{1}中的DateIns
列}将使用最小值Installations
为相应的idIns
更新。
一个更好的例子...考虑到上述情况,在这种情况下的结果将是:
ExpDateRev
答案 0 :(得分:1)
带有Aggregate
的{{1}}将为您提供帮助。
查询:
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 |