我正在處理簡單的查詢,但無法弄清楚如何修改以生成下面的輸出。來自查詢基於列的條件結果
Number Name Flag
1 ABC NULL
1 DEF FG
1 DEF NULL
我需要產生這種輸出:
Number Name Flag
1 ABC NULL
1 DEF FG
的邏輯是,當號碼和姓名一樣,走行與標誌。
我正在處理簡單的查詢,但無法弄清楚如何修改以生成下面的輸出。來自查詢基於列的條件結果
Number Name Flag
1 ABC NULL
1 DEF FG
1 DEF NULL
我需要產生這種輸出:
Number Name Flag
1 ABC NULL
1 DEF FG
的邏輯是,當號碼和姓名一樣,走行與標誌。
也許是這樣的:
首先是一些測試數據:
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
完美!這對於這個場景來說是最好的,我一直在尋找。謝謝! – user1141584 2012-02-22 00:24:51
很高興幫助..快樂編碼:P – Arion 2012-02-22 07:05:11
最簡單的方法,但我不知道是否符合您的要求,如果有多個非NULL值。
SELECT Number, Name, Flag = MAX(Flag)
FROM dbo.Table
GROUP BY Number, Name;
,如果你有一個包含'1的另一行會發生什麼DEF GH'? – 2012-02-20 21:49:22