SQL — Получение данных на основе количества полей

#sql-server #sql-server-2008 #tsql

#sql-сервер #sql-server-2008 #tsql

Вопрос:

Здесь мои данные будут выглядеть

введите описание изображения здесь

Здесь круг 1 является моим значением по умолчанию.
Я хочу, чтобы данные были такими,

  1. Если пользователь принадлежит только circle1 (то есть circle id 1), то верните его / circle как есть.
  2. Если пользователь принадлежит к другому circles, то удалите данные circle 1 из списка и верните.

Мне нужны данные, подобные следующим,
введите описание изображения здесь

Комментарии:

1. Размещайте не изображения, а форматированный текст, используйте кодовую кнопку редактора, чтобы отформатировать его в виде блоков.

Ответ №1:

Вы можете использовать NOT EXISTS , как показано ниже:

 SELECT
    *
FROM
    Tbl A
WHERE
    NOT EXISTS
    (
        SELECT 1 FROM Tbl B
        WHERE
            B.PersonId = A.PersonId AND
            B.CircleID <> 1
    ) OR
    A.CircleID <> 1
  

Комментарии:

1. Спасибо. Вернет ли это circle 1, если у пользователя есть только circle1?

2. Большое спасибо. Все еще у меня есть сомнения. Вы выбираете из tbl два раза. Здесь, в моем фактическом запросе, где вы разместили Tbl, здесь у меня есть запрос join. Итак, если мне нравится описанный выше метод, то мне нужно вызвать join два раза. Верно? тогда это приведет к снижению производительности.

3. @JeevaJsb Я с вами не согласен. Можете ли вы попробовать запрос?

4. Конечно. Я проверю.

5. Большое спасибо. Это работает. Я просто немного изменил в зависимости от моего состояния.