Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 选择列B仅具有列A的不同实例的所有记录_Sql_Sql Server_Select - Fatal编程技术网

Sql 选择列B仅具有列A的不同实例的所有记录

Sql 选择列B仅具有列A的不同实例的所有记录,sql,sql-server,select,Sql,Sql Server,Select,我不知道如何解释这种情况,这有点棘手,因此我将尝试给您举一个我拥有的数据和我需要的输出的示例: CREATE TABLE #TempTable( A int, B int) INSERT INTO #TempTable (A,B) VALUES (1,1), (1,2), (1,2), (1,4), (3,2), (3,2), (3,2), (3,3), (3,3); 我不知道如何选择所有记录,以便最终输出为: 1,1 1,4 3,3 3,3 我需要B列只有A列的不同实例的记录。所有其他实

我不知道如何解释这种情况,这有点棘手,因此我将尝试给您举一个我拥有的数据和我需要的输出的示例:

CREATE TABLE #TempTable( A int, B int)
INSERT INTO #TempTable (A,B)
VALUES 
(1,1),
(1,2),
(1,2),
(1,4),
(3,2),
(3,2),
(3,2),
(3,3),
(3,3);
我不知道如何选择所有记录,以便最终输出为:

1,1
1,4
3,3
3,3
我需要B列只有A列的不同实例的记录。所有其他实例都应该忽略。。。我觉得这应该是很简单的,但我正在空白,我想不出来

更新:

我一直很难解释这一点,但我认为这是正确的逻辑:对于给定的a,可以有重复的B实例,但不能在不同的a之间有重复的B实例

SELECT A, B FROM TempTable
WHERE B IN (
  SELECT B
  FROM TempTable
  GROUP BY B
  HAVING COUNT(DISTINCT A) = 1
)
MS SQL 2012的工作示例:

MS SQL 2012的工作示例:

尝试:

with cte as
(select t.*, min(A) over (partition by B) minA, max(A) over (partition by B) maxA
 from #TempTable t)
select A, B
from cte
where minA=maxA
尝试:

SQLFiddle-

SQLFiddle-

选择t1.A、t1.B
来自诱惑t1
左可引t2
关于t1.B=t2.B和t1.At2.A
其中t2.A为空;

选择t1.A、t1.B
来自诱惑t1
左可引t2
关于t1.B=t2.B和t1.At2.A
其中t2.A为空;

我肯定遗漏了一些东西,为什么根据您定义的规则,您的列表中有3,3…您使用的是什么数据库系统?@xQbert对于给定的a,您可以有重复的B实例,但是不同的A之间不能有重复的B实例。@MarcinJuraszek MS SQLI肯定遗漏了一些东西为什么在您定义的规则下列表中有3,3…您使用的是什么数据库系统?@xQbert对于给定的A,您可以有重复的B实例,但是你不能在不同的A之间有重复的B实例;我认为我的要求需要修改:对于给定的a,你可以有B的重复实例,但是你不能在不同的a之间有B的重复实例。我一直很难真正描述这个要求,因为它有点模糊,但我认为我最终缩小了范围;我认为我的要求需要修改:对于给定的a,你可以有B的重复实例,但你不能在不同的a之间有B的重复实例。我一直很难真正描述这个要求,因为它有点模糊,但我认为我最终缩小了范围。
SELECT A, B, COUNT(A) as NumPairs 
FROM TempTable 
GROUP BY A, B 
HAVING COUNT(A)=1
SELECT t1.A, t1.B
  FROM TempTable t1
  LEFT JOIN TempTable t2
    ON t1.B=t2.B AND t1.A<>t2.A
WHERE t2.A IS NULL;