2012-02-20 76 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'? – 2012-02-20 21:49:22

回答

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 2012-02-22 00:24:51

+0

很高興幫助..快樂編碼:P – Arion 2012-02-22 07:05:11

2

最簡單的方法,但我不知道是否符合您的要求,如果有多個非NULL值。

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