#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
);