2012-04-30 41 views
0

考虑一个表A.表A有一个名为INNETTEDTXNID的列,它不是主键,也不是唯一的,可以为空。SQL检查列不止一次出现

我有一个基于某些条件(与列INNETTEDTXNID无关)的表A上的select *。

对于上面提到的每一行,我必须找到一个名为isNetted的值isnetted的概念是如果该行的列INNETTEDTXNID在整个表格(包括该行)中出现不止一次,那么的值是网络对于该行将是真实的。

我希望我的问题很清楚。感谢您提前帮忙。

+0

列名可能会更清晰一点。只是说! – rvphx

回答

1

可能没有 - 靠近最有效的地方,但它的工作原理。

SELECT TableA.INNETTEDTXNID, 
CASE 
WHEN NetChk.INNETTEDTXNID IS NOT NULL Then 1 
ELSE 0 
END AS isNetted 
FROM TABLEA 
LEFT JOIN (
      SELECT INNETTEDTXNID 
      FROM TableA 
      GROUP BY INNETTEDTXNID 
      HAVING COUNT(INNETTEDTXNID) >1) 
NetChk ON TableA.INNETTEDTXNID = NetChk.INNETTEDTXNID 
1

这将返回任何出现多次的条目的值。

SELECT a.INNETTEDTXNID 
FROM TableA as a, TableA as b 
WHERE 
    not a.id=b.id 
    and a.INNETTEDTXNID=b.INNETTEDTXNID 

,如果你想这样做专门检查,如果一个号码多次出现,你可以做类似

SELECT COUNT(INNETTEDTXNID) 
FROM TableA 
WHERE INNETTEDTXNID='value' 

如果它返回一个,便以其独特的,超过一个以上的不是唯一的。如果你想让它返回真或假,你可以使用

SELECT 
    CASE WHEN (
     SELECT COUNT(INNETTEDTXNID) 
     FROM TableA 
     WHERE INNETTEDTXNID='value' 
    )>1 THEN 'True' 
    ELSE 'False' 
    END 
    AS isNetted