2012-02-20 11 views
2

私は単純なクエリで作業していますが、以下の出力を生成するために変更する方法を理解することはできません。カラムによるクエリの条件付き結果

Number Name Flag 
    1  ABC NULL 
    1  DEF FG 
    1  DEF NULL 

私はこの出力を生成する必要があります。

Number Name Flag 
    1  ABC NULL 
    1  DEF FG 

ロジックは、番号と名前が同じである場合、旗を持つ行を取るです。

+3

あなたが '1を含む別の行を持っている場合はどうなりますかDEF GH'? –

答えて

0

たぶん、このような何か:

まずいくつかのテストデータ:

DECLARE @tbl TABLE(Number INT,Name VARCHAR(10),Flag VARCHAR(3)) 

INSERT INTO @tbl 
VALUES 
    (1,'ABC',NULL), 
    (1,'DEF','FG'), 
    (1,'DEF',NULL) 

このようなクエリ:

;WITH CTE AS 
(
    SELECT 
     RANK() OVER(PARTITION BY Name ORDER BY Flag DESC) AS iRank, 
     tbl.Number, 
     tbl.Name, 
     tbl.Flag 
    FROM 
     @tbl AS tbl 
) 
SELECT 
    * 
FROM 
    CTE 
WHERE 
    CTE.iRank=1 
+0

完璧!それはシナリオのために最高の仕事、私が探していた..ありがとう!!!! – user1141584

+0

喜んで助けてください..ハッピーコーディング:P – Arion

2

単純な方法ですが、NULL以外の値が複数ある場合は、それが要件を満たしているかどうかわかりません。

SELECT Number, Name, Flag = MAX(Flag) 
    FROM dbo.Table 
    GROUP BY Number, Name;