我不知道该怎么说这个问题所以它有意义,但通过下面的例子可能最好地理解这个问题。
我的表的结构使得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
我需要为每个ID值选择一个数字值和相应ID号的列表:
PK ID VALUE
1 160487 10122
3 166980 10147
5 166986 10147
如何解决此问题?我使用的是SQL Server 2005。
答案 0 :(得分: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
如果您有多个具有相同ID和数字值的记录,并且您希望在CTE中只需要GROUP BY ID
或使用ROW_NUMBER
。但是,如果上述情况并非如此,那就更容易了。
答案 1 :(得分:1)
以下是IN
的一种方式:
select *
from yourtable
where isnumeric(value) = 1
and id in (select id from yourtable where value = 'mf')
答案 2 :(得分:0)
试试这个......
SELECT * FROM tableName WHERE id IN (
SELECT DISTINCT dt.id FROM tableName dt WHERE ISNUMERIC(dt.value) = 0)
AND ISNUMERIC(value) = 1
答案 3 :(得分:0)
最有效的方法是将表连接到自身:
select t1.*
from mytable t1
join mytable t2 on t2.id = t1.id
and t2.value = 'mf'
where isnumeric(t1.value)
如果value
列仅包含*数字值或'mf',则可以通过将where子句更改为:
where t1.value != 'mf'
答案 4 :(得分:0)
您可以使用: 选择 * FROM tableName WHERE ISNUMERIC(VALUE)= 1 AND ID IN(SELE ID FROM tablewhere value ='mf')