Как вернуть заблокированные слоты, в которых заблокированы не все номера слотов (т.Е. Участник дискуссии не мертв)

#sql

#sql

Вопрос:

У меня есть таблица фактов инвентаризации. Он создается путем сопоставления таблицы stg с датой, и поэтому каждый слот имеет запись против каждой даты в таблице дат.

например, здесь я показал, как выглядит таблица для участника дискуссии 248. Он имеет 3 слота (900 — 902) с номером слота от 1 до 3

 DateID  SlotID  SlotNo  Available   Blocked PanelList
20200922    900 1   1   0   248
20200923    900 1   1   0   248
20200922    901 2   1   0   248
20200923    901 2   1   0   248
20200922    902 3   1   0   248
20200923    902 3   1   0   248
  

Слоты могут быть заблокированы. В некоторых случаях выбранные слоты участника дискуссии блокируются. Другими словами, все слоты (т.Е. Все номера слотов заблокированы. Это когда слот мертв)

Я хочу запросить таблицу фактов, чтобы вернуть только выборочную заблокированную панель, то есть тех участников дискуссии и слотов, у которых заблокирован слот в одном или нескольких слотах no, но НЕ во всех слотах no (в этом случае он мертв).

например

 DateID  SlotID  SlotNo  Available   Blocked PanelList
20200922    900 1   1   0   248
20200923    900 1   1   0   248
20200922    901 2   1   1   248
20200923    901 2   1   1   248
20200922    902 3   1   0   248
20200923    902 3   1   0   248
  

(примечание: заблокированный слот — это когда значения Available и Blocked равны 1)

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

1. Я попытался вставить таблицу как таблицу, но я не мог понять, как это сделать в стеке. Если кто-то знает исправление, чтобы соответствующим образом проиллюстрировать таблицу, пожалуйста, сделайте это. Заранее приношу извинения. Пожалуйста, добавьте также соответствующие теги. Большое спасибо, Shoaib

Ответ №1:

Я думаю, вы просто хотите exists :

 select t.*
from t
where exists (select 1
              from t t2
              where t2.panellist = t.panellist and 
                    t2.available = 1 and t2.blocked = 1
             );