考虑一个表A.表A有一个名为INNETTEDTXNID的列,它不是主键,也不是唯一的,可以为空。SQL检查列不止一次出现
我有一个基于某些条件(与列INNETTEDTXNID无关)的表A上的select *。
对于上面提到的每一行,我必须找到一个名为isNetted的值。 isnetted的概念是如果该行的列INNETTEDTXNID在整个表格(包括该行)中出现不止一次,那么的值是网络对于该行将是真实的。
我希望我的问题很清楚。感谢您提前帮忙。
考虑一个表A.表A有一个名为INNETTEDTXNID的列,它不是主键,也不是唯一的,可以为空。SQL检查列不止一次出现
我有一个基于某些条件(与列INNETTEDTXNID无关)的表A上的select *。
对于上面提到的每一行,我必须找到一个名为isNetted的值。 isnetted的概念是如果该行的列INNETTEDTXNID在整个表格(包括该行)中出现不止一次,那么的值是网络对于该行将是真实的。
我希望我的问题很清楚。感谢您提前帮忙。
可能没有 - 靠近最有效的地方,但它的工作原理。
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
这将返回任何出现多次的条目的值。
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
列名可能会更清晰一点。只是说! – rvphx