• 主页
  • 当组中的任意值为0时,将组内的所有值设置为0

当组中的任意值为0时,将组内的所有值设置为0

我想扫描一个表,如果某个组中的任何值为0,则将该组中的值重新分配给0。通过搜索Group ByPartitionAny的各种组合,我似乎找不到解决方案。

我开始使用的数据如下所示

CREATE TABLE #QP
(
    [Method] VARCHAR(1),
    [Station] VARCHAR(1),
    [Instrument] VARCHAR(20),
    [LastAnalysis] DATE,
    [DaysPassed] INT
)

INSERT INTO #QP
(Method, Station, Instrument, LastAnalysis, DaysPassed)
VALUES
('A', 1, 'Polaris', '2016-07-19', 21),
('B', 1, 'Polaris', '2016-08-04', 5),
('C', 1, 'Polaris', '2016-07-31', 9),
('A', 2, 'Polaris', '2016-07-31', 9),
('B', 2, 'Polaris', '2016-08-09', 0),
('C', 2, 'Polaris', '2016-07-23', 17),
('A', 3, 'Polaris', '2016-08-09', 0),
('B', 3, 'Polaris', '2016-07-27', 13),
('C', 3, 'Polaris', '2016-07-19', 21)

我希望结果显示为(为了便于解释,包含换行符)

Method  Station Instrument  LastAnalysis    DaysPassed  Weight
A             1    Polaris    2016-07-19            21      21 
B             1    Polaris    2016-08-04            5        5
C             1    Polaris    2016-07-31            9        6

A             2    Polaris    2016-07-31            9        0
B             2    Polaris    2016-08-09            0        0
C             2    Polaris    2016-07-23            17       0

A             3    Polaris    2016-08-09            0        0
B             3    Polaris    2016-07-27            13       0
C             3    Polaris    2016-07-19            21       0

到目前为止,我得到的最接近的方法是使用

SELECT *,
    CASE WHEN 0 = ANY(SELECT DaysPassed FROM #QP) THEN 0 ELSE DaysPassed END AS [Weight]
FROM #QP 
WHERE Instrument = 'Polaris'
ORDER BY Station, Method

但是这会将Weight列中的每个值设置为0,而Station组中的值应该保持不变。

如果这个已经有答案了,我很想知道正确的搜索词来查找它。

转载请注明出处:http://www.cxd6.com/article/20230529/1516849.html