Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 当组中的任何值为0时,将组中的所有值设置为0_Sql_Sql Server - Fatal编程技术网

Sql 当组中的任何值为0时,将组中的所有值设置为0

Sql 当组中的任何值为0时,将组中的所有值设置为0,sql,sql-server,Sql,Sql Server,如果某个组中的任何值为0,我希望扫描一个表并将该组中的值重新分配给0。我似乎无法通过搜索分组依据、分区和任何的各种组合来找到解决方案 我开始使用的数据如下所示 CREATE TABLE #QP ( [Method] VARCHAR(1), [Station] VARCHAR(1), [Instrument] VARCHAR(20), [LastAnalysis] DATE, [DaysPassed] INT ) INSERT INTO #QP (Meth

如果某个组中的任何值为0,我希望扫描一个表并将该组中的值重新分配给0。我似乎无法通过搜索
分组依据
分区
任何
的各种组合来找到解决方案

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

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)
我希望结果显示为(包括换行符以便于解释)

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

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
但是当
组中的值应保持不变时,这会将
权重
列中的每个值设置为0


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

我认为使用
min()
窗口函数会起作用。试一试:

SELECT *,
       case when min(DaysPassed) over (partition by station) = 0 then 0 else DaysPassed end as [Weight]
FROM #QP 
WHERE Instrument = 'Polaris'
ORDER BY Station, Method

我认为使用
min()
窗口函数将起作用。试一试:

SELECT *,
       case when min(DaysPassed) over (partition by station) = 0 then 0 else DaysPassed end as [Weight]
FROM #QP 
WHERE Instrument = 'Polaris'
ORDER BY Station, Method
返回

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           9
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
返回

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           9
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