0

T-SQL で DB に取り組んでいますが、現在問題があります。

同じ名前の複数の行がありますが、列の 1 つで値が異なります (1 つの行docは 0 で、2 番目の行docは 2000 です)。

ここで、行に 0 があるものをすべて選択したいと思います。0 がない場合は、値のあるものを選択します。

サンプルデータは次のとおりです。

CREATE TABLE Table1
    ([name] varchar(3), [doc] int, [sum] int)
;

INSERT INTO Table1
    ([name], [doc], [sum])
VALUES
    ('tom', 0, 100),
    ('tom', 2000, 200),
    ('jon', 2000, 200)
;

ここで、TOM の値が 100、JON の値が 200 の行を取得することを期待しています。

4

3 に答える 3

3

で使用ROW_NUMBERするCTE:

WITH cte 
     AS (SELECT [name], 
                [doc], 
                [sum], 
                [rn] = Row_number() 
                       OVER( 
                         partition BY name 
                         ORDER BY CASE WHEN doc=0 THEN 0 ELSE 1 END) 
         FROM   table1) 
SELECT [name], 
       [doc], 
       [sum] 
FROM   cte 
WHERE  rn = 1 

デモ(サンプル データ付き)

于 2013-03-26T22:12:10.303 に答える
0

A列に負の値を指定できないと仮定します。

select name, min(A)
from yourtable
group by name

上記のそれぞれの行全体が必要な場合は、サブクエリを使用する必要があります。

select yourtable.* from yourtable
join (
    select name, min(A) [mina]
    from yourtable
    group by name
) a on a.name=yourtable.name and a.[mina]=yourtable.A
于 2013-03-26T21:59:29.843 に答える
0

このバージョンでは、ウィンドウ関数を使用して、各名前の値がゼロの行の数をカウントします。次に、質問のロジックを使用して、値が 0 の行または有効な値を持つ行のいずれかを選択します。

select name, value
from (select name, value,
             sum(case when value = 0 then 1 else 0 end) over (partition by name) as NumZeros
      from t
     ) t
 where numZeros = 0 or value = 0
于 2013-03-26T21:59:32.453 に答える