0

我不知道如何表达这个问题,所以它是有道理的,但通过下面的示例可能最好地理解这个问题。

我的表的结构使得 ID 可以具有不同的行值:

PK   ID        VALUE
1    160487    10122
2    160487    MF
3    166980    10147
4    166980    MF
5    166986    10147
6    166986    MF
7    166695    10121

我需要为每个具有“MF”值的 ID选择数值列表和相应的 ID 号:

PK   ID        VALUE
1    160487    10122
3    166980    10147
5    166986    10147

我该如何解决这个问题?我使用 SQL Server 2005。

4

5 回答 5

2

如果您总是有两条记录,其中一条MF为值,另一条为数字,您可以使用:

SELECT PK, ID, VALUE
FROM dbo.TableName t
WHERE EXISTS(SELECT 1 FROM dbo.TableName t2
             WHERE t2.ID=t.ID AND t2.VALUE='MF')
AND ISNUMERIC(t.VALUE) = 1

Sql-Fiddle 演示

如果您有多个具有相同 ID 和数值的记录,并且您只想查看一个您需要GROUP BY IDROW_NUMBER在 CTE 中使用的记录。但是,如果不是这样,上面的情况会更容易。

于 2013-11-08T14:12:02.250 回答
1

这是一种方法IN

select *
from yourtable
where isnumeric(value) = 1
  and id in (select id from yourtable where value = 'mf')
于 2013-11-08T14:13:12.320 回答
0

最有效的方法是将表连接到自身:

select t1.*
from mytable t1
join mytable t2 on t2.id = t1.id
    and t2.value = 'mf'
where isnumeric(t1.value)

如果该value列仅包含 *either^ 数值“mf”,则可以通过将 where 子句更改为:

where t1.value != 'mf'
于 2013-11-08T20:29:09.180 回答
0

尝试这个...

SELECT * FROM tableName WHERE id IN (
SELECT DISTINCT dt.id FROM tableName dt WHERE ISNUMERIC(dt.value) = 0)
AND ISNUMERIC(value) = 1
于 2013-11-08T14:10:20.757 回答
0

您可以使用:SELECT * FROM tableName WHERE ISNUMERIC(VALUE) = 1 AND ID IN (SELE ID FROM tablewhere value = 'mf')

于 2013-11-08T20:46:47.737 回答