2012-04-30 2 views
0

Рассмотрим таблицу A. Таблица A имеет столбец с именем INNETTEDTXNID, который не является Первичным ключом и не является уникальным и может быть нулевым.Столбец SQL Check присутствует более одного раза

У меня есть выбор * на таблице A на основе некоторого условия (не связанного с столбцом INNETTEDTXNID).

Для каждой из строк, взятых выше, я должен найти значение, называемое isNetted. Концепция isNetted заключается в том, что если столбец INNETTEDTXNID этой строки присутствует более одного раза во всей таблице (включая эту строку), тогда значение isNetted будет истинным для этой строки.

Надеюсь, мой вопрос ясен. Спасибо за помощь в помощи.

+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 
Смежные вопросы