Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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查询_Sql_Sql Server_Tsql_Distinct - Fatal编程技术网

不同值的SQL查询

不同值的SQL查询,sql,sql-server,tsql,distinct,Sql,Sql Server,Tsql,Distinct,我有一张如下的桌子 INTERPRO GOTERM1 GOTERM2 CONFIDENCE IPR123 1576 2345 1.000 IPR235 3459 4987 1.000 IPR356 9987 5567 1.000 IPR568 3345 3213 0.88 IPR342 7860 7654 0.88 现在我想要任何

我有一张如下的桌子

INTERPRO    GOTERM1  GOTERM2   CONFIDENCE

IPR123      1576     2345       1.000
IPR235      3459     4987       1.000
IPR356      9987     5567       1.000
IPR568      3345     3213       0.88
IPR342      7860     7654       0.88 
现在我想要任何具有不同置信值的记录,如下所示

IPR123   1576    2345   1.000
IPR342   7860    7654    0.88
编辑:

如果INTERPRO的置信度不唯一:

SELECT t2.INTERPRO, t2.GOTERM1, t2.GOTERM2, t1.CONFIDENCE
FROM   (SELECT DISTINCT t3.CONFIDENCE FROM tbl t3) t1,
       (SELECT TOP 1 t4.INTERPRO, t4.GOTERM1, t4.GOTERM2
        FROM   tbl t4
        WHERE  t4.CONFIDENCE = t1.CONFIDENCE) t2
应该可以,不过我手头上没有SQL Server实例来仔细检查

编辑:

如果INTERPRO的置信度不唯一:

SELECT t2.INTERPRO, t2.GOTERM1, t2.GOTERM2, t1.CONFIDENCE
FROM   (SELECT DISTINCT t3.CONFIDENCE FROM tbl t3) t1,
       (SELECT TOP 1 t4.INTERPRO, t4.GOTERM1, t4.GOTERM2
        FROM   tbl t4
        WHERE  t4.CONFIDENCE = t1.CONFIDENCE) t2

应该可以,不过我手头上没有SQL Server实例可以仔细检查。

使用SQL Server 2005+您可以尝试以下方法

;WITH Vals AS(
        SELECT  *,
                ROW_NUMBER() OVER (PARTITION BY CONFIDENCE ORDER BY INTERPRO ) RowID
        FROM    YourTable
)
SELECT  *
FROM    Vals
WHERE   RowID = 1

使用Sql Server 2005+您可以尝试以下操作

;WITH Vals AS(
        SELECT  *,
                ROW_NUMBER() OVER (PARTITION BY CONFIDENCE ORDER BY INTERPRO ) RowID
        FROM    YourTable
)
SELECT  *
FROM    Vals
WHERE   RowID = 1

如果INTERPRO是唯一的

SELECT * FROM TABLE WHERE INTERPRO in 
(
SELECT MIN(INTERPRO) FROM TABLE
GROUP BY CONFIDENCE
)  

如果INTERPRO是唯一的,您可以用任何您喜欢的内容替换MIN()

SELECT * FROM TABLE WHERE INTERPRO in 
(
SELECT MIN(INTERPRO) FROM TABLE
GROUP BY CONFIDENCE
)  

你可以用你喜欢的任何东西来替换MIN(),
IPR123 1576 2345 1.000
,为什么不
IPR235 3459 4987 1.000
?定义其他标准以决定选择哪一行。将采用任何具有一个不同置信值的行。没有特定标准。那么,
IPR123 1576 2345 1.000
为什么不
IPR235 3459 4987 1.000
?定义其他标准以决定选择哪一行。任何具有一个不同置信值的行都会被采用。没有特定的标准。如果有两行具有相同的t.INTERPRO呢?我在发布并离开计算机过夜后想到了这一点。如果INTERPRO在每个置信度上不是唯一的,那么这将不起作用,因此需要进行编辑…如果有两行具有相同的t.INTERPRO呢?我在发布并离开计算机过夜后想到了这一点。如果INTERPRO不是唯一的置信度,那么这将不起作用,因此,需要进行编辑…此查询将提供不一致的数据,如user489678所述:获取具有一个不同置信值的任何行。没有特定条件。此查询将提供不一致的数据,如user489678所述:获取具有一个不同置信值的任何行。没有特定条件。