Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выбрать похожие записи относительно эталонной  [new]
palladin600
Member

Откуда: Minsk Power Station
Сообщений: 497
Здравствуйте!

Просьба помочь составить запрос для отбора записей с аналогичными свойствами относительно имеющегося известного.
Т.е. есть куча шкафов, некоторые имеют схожие размеры. Мне известен ID одного шкафа, как на его базе получить остальные шкафы с такими же свойствами?

Вот пример:
declare @Subjects table(name varchar(10), id int)
insert into @Subjects(name, id)
select 'Шкаф1', 1 union all
select 'Шкаф2', 2 union all
select 'Шкаф3', 3 union all
select 'Шкаф4', 4 

declare @Sizes table(ID int, Width int, Height int, [Length] int)
insert into @Sizes(ID, Width, Height, [Length])
select 1, 100, 170, 200 union all
select 2, 120, 170, 200 union all
select 3, 100, 170, 200 union all
select 4, 130, 200, 200 union all
select 5, 100, 170, 200 


//получаю определённый шкаф, зная его ID
SELECT s.name, sz.Width, sz.Height, sz.[Length] FROM @Subjects s INNER JOIN @Sizes sz ON s.ID = sz.ID WHERE s.ID = 1 
Шкаф1	100	170	200

//теперь мне надо получить аналогичные по размеру и другие шкафы со схожими размерами, что и у ID=1, в итоге результат такой должен получиться:
Шкаф3	100	170	200
Шкаф5	100	170	200
28 сен 17, 22:01    [20830267]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать похожие записи относительно эталонной  [new]
palladin600
Member

Откуда: Minsk Power Station
Сообщений: 497
Sorry, в таблице @Subjects не дописал один шкаф..
...
select 'Шкаф4', 4 union all
select 'Шкаф5', 5
28 сен 17, 22:19    [20830311]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать похожие записи относительно эталонной  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
select
    s.name, sz.Width, sz.Height, sz.[Length]
from
    @Sizes sz
    inner join
        (
        select
            sz2.Width, sz2.Height, sz2.[Length]
        from
            @Sizes sz2
        where
            sz2.ID = 1
        ) t on t.Width = sz.Width and
               t.Height = sz.Height and
               t.[Length] = sz.[Length]
    inner join @Subjects s on s.ID = sz.ID
28 сен 17, 23:18    [20830459]     Ответить | Цитировать Сообщить модератору
 Re: Выбрать похожие записи относительно эталонной  [new]
palladin600
Member

Откуда: Minsk Power Station
Сообщений: 497
Дедушка,

выдаёт 3 записи, в т.ч. и с ID=1
Шкаф1	100	170	200
Шкаф3 100 170 200
Шкаф5 100 170 200
не по заданию.

Чтобы исключить ID=1, достаточно в конце вашего запроса указать
where s.id <> 1
?
так правильно?
28 сен 17, 23:57    [20830534]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить