Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 a、B、C、D分组中的不同E、F?_Sql Server 2008_Tsql - Fatal编程技术网

Sql server 2008 a、B、C、D分组中的不同E、F?

Sql server 2008 a、B、C、D分组中的不同E、F?,sql-server-2008,tsql,Sql Server 2008,Tsql,我想确定A、B、C、D分组中E、F列组合的不同值超过1的情况 例如,给定以下数据: SELECT * FROM MyTable A B C D E F ---------- ---------- ---------- ---------- ---------- ---------- 1 1 1 1 A B

我想确定A、B、C、D分组中E、F列组合的不同值超过1的情况

例如,给定以下数据:

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         
…因为在A、B、C、D分组中有多个不同的E、F组合

下面是创建测试用例的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 [dbo].[MyTable]
GROUP BY A,B,C,D
HAVING COUNT(DISTINCT E) > 1 OR COUNT(DISTINCT F) > 1
编辑:使用了错误的窗口功能

编辑2:使用示例数据现在更清晰

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


@维利卡:我在你的样本数据前30分钟写的。我基本上猜到了。但我现在明白我的错误了,我认为我们的答案都是错的。它们都返回2行而不是1行。我添加了额外的信息来帮助人们帮助我:-@Velika:我在你的样本数据之前30分钟写了这篇文章。我基本上猜到了。但我现在明白我的错误了,我认为我们的答案都是错的。它们都返回2行而不是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