powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / DISTINCT по нескольким полям...
6 сообщений из 6, страница 1 из 1
DISTINCT по нескольким полям...
    #39598022
asd10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Глупый вопрос
Есть выборка типа
t1.ID, t2.Name1, t2.Name2, t3.Value

Так вот t1 и t3 джойнится left join и есть условие по t3
Соответственно нужно выбрать DISTINCT (t1.ID), но сохраняя при этом t2.Name1, t2.Name2
...
Рейтинг: 0 / 0
DISTINCT по нескольким полям...
    #39598026
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asd10,

Ниче не понял. А теперь нормально и с примером, что есть, а что надо.
...
Рейтинг: 0 / 0
DISTINCT по нескольким полям...
    #39598031
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asd10,

пронумеровать ROW_NUMBER() OVER (PARTITION BY t1.Id) и взять первые
...
Рейтинг: 0 / 0
DISTINCT по нескольким полям...
    #39598051
asd10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Суть:
Table1 t1 - основная таблица с записями
Table2 t2 - справочник из которого нужно взять определенное имя
Table3 t3 - таблица атрибутов (может быть несколько атрибутов структура: ObjectID, AttributeID, Value )
Нужно выбрать все записи t1, с именем из t2 для которых не существует атрибута AttributeID=1 в t3, либо значение атрибута c AttributeID=1 не равно 'а' и не равно 'b'

Пока есть:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select * from
(select t1.ID, t3.* from Table1 t1
inner join Table2 t2 on t1.AnyID = t2.AnyID
left join Table3 t3  on t3.ObjectID = t1.ID
where t1.Brief like 'abc%'    
) ttt 
where AttributeID IS NULL
 or  ((AttributeID=1) and (Value<>'a') and (Value<>'b'))
 or ((AttributeID<>1) and not exists (select * from Table3 where ObjectID=ID and (AttributeID=1) and ((Value='a') or (Value='b'))))
...
Рейтинг: 0 / 0
DISTINCT по нескольким полям...
    #39598071
Kopelly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asd10,
1.Тебе не нужно тянуть значения Table3 (вычеркиваем "left join Table3 t3") - достаточно проверить наличие определенных записей.
2.Условие "для которых не существует атрибута AttributeID=1 в t3, либо значение атрибута c AttributeID=1 не равно 'а' и не равно 'b'" упрощается до вида "для которых не существует атрибута AttributeID=1 в t3 со значениями равными 'а' или 'b'":
Код: sql
1.
2.
3.
4.
select t1.ID, t2.* from Table1 t1
inner join Table2 t2 on t1.AnyID = t2.AnyID
where t2.Brief like 'abc%'    
and not exists (select 1 from Table3 t3 where t3.ObjectID=t1.ID and t3.AttributeID=1 and t3.Value in ('a','b'))
...
Рейтинг: 0 / 0
DISTINCT по нескольким полям...
    #39599040
asd10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kopelly, спасибо!
Тормознул с условием и правда ))
Но всё-равно остались не уникальные по t1.ID записи.
Там ещё один джоин добавился у меня.
Сделал просто GroupBY t1.ID, t2.Name1, t2.Name2
по всем нужным для вывода полям.
Надеюсь это правильно.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / DISTINCT по нескольким полям...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]