2016-08-18 4 views
1

グループ内の値が0の場合、テーブルをスキャンしてグループ内の値を0に再割り当てしたいと思います。 Group ByPartition、および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グループの値をそのまま維持する必要があります。

これには既に回答がある場合は、検索に使用する正しい検索条件を知りたいと思います。

答えて

3

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 
1
SELECT * 
     ,Weight= Sign(min(DaysPassed) over (Partition By Station)) * DaysPassed 
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 
関連する問題