2011-11-04 66 views
0

我想確定在A,B,C,D分組內有多於1個不同的E,F列組合值的情況。A,B,C,D分組內的不同的E,F?

例如,給定以下數據:

SELECT * FROM MyTable 

A   B   C   D   E   F 
---------- ---------- ---------- ---------- ---------- ---------- 
1   1   1   1   A   B   
1   1   1   1   A   B   
1   1   1   2   A   C   
1   1   1   2   A   D 

我想返回

A   B   C   D   
---------- ---------- ---------- ----------  
1   1   1   2   

..because有AR多個不同的(E,F)的組合爲(A內,B, C,D)分組)。

這是SQL創建測試用例!

CREATE TABLE [dbo].[MyTable](
    [A] [nchar](10) NULL, 
    [B] [nchar](10) NULL, 
    [C] [nchar](10) NULL, 
    [D] [nchar](10) NULL, 
    [E] [nchar](10) NULL, 
    [F] [nchar](10) NULL 
) ON [PRIMARY] 

GO 
INSERT INTO [dbo].[MyTable]([A], [B], [C], [D], [E], [F]) 
SELECT N'1   ', N'1   ', N'1   ', N'1   ', N'A   ', N'B   ' UNION ALL 
SELECT N'1   ', N'1   ', N'1   ', N'1   ', N'A   ', N'B   ' UNION ALL 
SELECT N'1   ', N'1   ', N'1   ', N'2   ', N'A   ', N'C   ' UNION ALL 
SELECT N'1   ', N'1   ', N'1   ', N'2   ', N'A   ', N'D   ' 

回答

2
SELECT 
    A,B,C,D 
FROM 
    (
    SELECT 
     A,B,C,D, 
     ROW_NUMBER() OVER (PARTITION BY A,B,C,D,E,F ORDER BY (SELECT 1)) AS DistinctTuplesLong, 
     ROW_NUMBER() OVER (PARTITION BY A,B,C,D ORDER BY (SELECT 1)) AS DistinctTuples 
    FROM 
     Mytable 
    ) T 
WHERE 
    DistinctTuplesLong < DistinctTuples 

編輯:使用了錯誤的窗函數

編輯2:現在更清晰樣本數據

+0

對不起:你確定嗎?結果看起來不正確。 – ChadD

+0

@Velika:我在你的樣本數據前30分鐘寫了這篇文章。我基本上猜到了。但我現在看到我的錯誤 – gbn

+0

我認爲我們的答案都是錯誤的。他們都返回2行而不是1行。我添加了額外的信息來幫助人們幫助我:-) – ChadD

1
SELECT A,B,C,D 
FROM [dbo].[MyTable] 
GROUP BY A,B,C,D 
HAVING COUNT(DISTINCT E) > 1 OR COUNT(DISTINCT F) > 1 

或者

WITH T 
    AS (SELECT *, 
       DENSE_RANK() OVER (PARTITION BY A, B, C, D ORDER BY E, F) Rnk 
     FROM [dbo].[MyTable]) 
SELECT DISTINCT A, 
       B, 
       C, 
       D 
FROM T 
WHERE Rnk = 2 
相關問題