グループ内の値が0の場合、テーブルをスキャンしてグループ内の値を0に再割り当てしたいと思います。 Group By
、Partition
、およびAny
のさまざまな組み合わせを検索することによって、この問題に対する解決策を見つけることができます。グループ内の値が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)
のように見えるから始まると私のように表示されるように結果をご希望のデータ
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
コ内のすべての値を設定しますStation
グループの値をそのまま維持する必要があります。
これには既に回答がある場合は、検索に使用する正しい検索条件を知りたいと思います。