sql-server – SQL:如何在特定列中仅选择具有唯一值的行?

前端之家收集整理的这篇文章主要介绍了sql-server – SQL:如何在特定列中仅选择具有唯一值的行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
感谢百万人每个人的回应。不幸的是,没有一个解决方案似乎在我的目的地工作,而我的猜测是,我提供的例子已经搞砸了。

所以让我再试一次。

我的表看起来像这样:

contract    project activity
row1    1000    8000    10
row2    1000    8000    20
row3    1000    8001    10
row4    2000    9000    49
row5    2000    9001    49
row6    3000    9000    79
row7    3000    9000    78

基本上,我正在寻找的查询将为“合同,活动”返回“2000,49”,因为只有合同#2000有一个,只有一个唯一的活动值。

再次感谢一百万的提前,
boroatel

解决方法

更新以使用您提供的新数据:

使用原始数据的解决方案可以在此答案的最后找到。

使用您的新数据:

DECLARE  @T TABLE( [contract] INT,project INT,activity INT )
INSERT INTO @T VALUES( 1000,8000,10 )
INSERT INTO @T VALUES( 1000,20 )
INSERT INTO @T VALUES( 1000,8001,10 )
INSERT INTO @T VALUES( 2000,9000,49 )
INSERT INTO @T VALUES( 2000,9001,49 )
INSERT INTO @T VALUES( 3000,79 )
INSERT INTO @T VALUES( 3000,78 )

SELECT DISTINCT [contract],activity FROM @T AS A WHERE
    (SELECT COUNT( DISTINCT activity ) 
     FROM @T AS B WHERE B.[contract] = A.[contract]) = 1

收益:
2000,49

使用原始数据的解决方

警告:
以下解决方案使用了问题中之前给出的数据,对当前的问题可能没有意义。我已经把它们附加在了完整性上。

SELECT Col1,Count( col1 ) AS count FROM table 
GROUP BY col1
HAVING count > 1

这应该会列出col1中所有不是不同的值。您可以将其放在表var或temp表中并加入。

以下是使用子查询的示例:

DECLARE @t TABLE( col1 VARCHAR(1),col2 VARCHAR(1),col3 VARCHAR(1) )

INSERT INTO @t VALUES( 'A','B','C' );
INSERT INTO @t VALUES( 'D','E','F' );
INSERT INTO @t VALUES( 'A','J','K' );
INSERT INTO @t VALUES( 'G','H','H' );

SELECT * FROM @t

SELECT col1,col2 FROM @t WHERE col1 NOT IN 
    (SELECT col1 FROM @t AS t GROUP BY col1 HAVING COUNT( col1 ) > 1)

这返回:

D   E
G   H

另一种用户使用临时表和加入的方法

DECLARE @t TABLE( col1 VARCHAR(1),'H' );

SELECT * FROM @t

DROP TABLE #temp_table  
SELECT col1 INTO #temp_table
    FROM @t AS t GROUP BY col1 HAVING COUNT( col1 ) = 1

SELECT t.col1,t.col2 FROM @t AS t
    INNER JOIN #temp_table AS tt ON t.col1 = tt.col1

还返回:

D   E
G   H

猜你在找的MsSQL相关文章