Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Sql. Как получить значение одной колонки, где значение другой равно перечню значений / 10 сообщений из 10, страница 1 из 1
23.06.2020, 23:09
    #39972584
hunter79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql. Как получить значение одной колонки, где значение другой равно перечню значений
Есть таблица
Код: sql
1.
ffv(id, f_id, fv_id)

.

Пример данных:
Код: sql
1.
2.
3.
4.
5.
6.
7.
id, f_id, fv_id
11, 22, 33
11, 11, 22
11, 33, 11
22, 33, 33
33, 11, 22
33, 22, 33



В процедуру передаю строку значений
Код: sql
1.
@fv_id = '33,22'

.
Загоняю во временную таблицу
Код: sql
1.
select value into #fv from string_split(@fv_id, ',')

.

Как получить все id, у которых
Код: sql
1.
fv_id = 33 и fv_id = 22

.
...
Рейтинг: 0 / 0
23.06.2020, 23:10
    #39972585
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql. Как получить значение одной колонки, где значение другой равно перечню значений
hunter79
Как получить все id, у которых
Код: sql
1.
fv_id = 33 и fv_id = 22

Никак, потому что fv_id не может быть одновременно равно 33 и 22.
...
Рейтинг: 0 / 0
23.06.2020, 23:24
    #39972588
hunter79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql. Как получить значение одной колонки, где значение другой равно перечню значений
Гавриленко Сергей Алексеевич,

одновременно нет, но для
Код: sql
1.
id=11

есть записи
Код: sql
1.
fv_id=33 и 22

:
Код: sql
1.
2.
3.
id, f_id, fv_id
11, 22, 33
11, 11, 22



то-есть, если
Код: sql
1.
fv_id

содержит разные значения (те что передаю) для одного
Код: sql
1.
id

, то мне этот
Код: sql
1.
id

нужен.

возможно я неправильно задал вопрос...
...
Рейтинг: 0 / 0
23.06.2020, 23:34
    #39972591
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql. Как получить значение одной колонки, где значение другой равно перечню значений
hunter79
Гавриленко Сергей Алексеевич,

одновременно нет, но для
Код: sql
1.
id=11

есть записи
Код: sql
1.
fv_id=33 и 22

:
Код: sql
1.
2.
3.
id, f_id, fv_id
11, 22, 33
11, 11, 22



то-есть, если
Код: sql
1.
fv_id

содержит разные значения (те что передаю) для одного
Код: sql
1.
id

, то мне этот
Код: sql
1.
id

нужен.

возможно я неправильно задал вопрос...


Код: sql
1.
select [id] from [ffv] where [fv_id] in (select [value] from string_split(@fv_id, ','));
...
Рейтинг: 0 / 0
23.06.2020, 23:52
    #39972595
hunter79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql. Как получить значение одной колонки, где значение другой равно перечню значений
felix_ff

Код: sql
1.
select [id] from [ffv] where [fv_id] in (select [value] from string_split(@fv_id, ','));



в данном случае я получу id = 11, 22, 33.
а мне нужно чтобы id = 11, 33.
то-есть, если у id, fv_id=33 (и только), то мне этот id не нужен.
...
Рейтинг: 0 / 0
24.06.2020, 02:28
    #39972608
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql. Как получить значение одной колонки, где значение другой равно перечню значений
hunter79
felix_ff

Код: sql
1.
select [id] from [ffv] where [fv_id] in (select [value] from string_split(@fv_id, ','));



в данном случае я получу id = 11, 22, 33.
а мне нужно чтобы id = 11, 33.
то-есть, если у id, fv_id=33 (и только), то мне этот id не нужен.


о госпади я три раза перечитал что вы тут написали и все равно нихрена не понял что вам нужно.
из вашего объяснения я не понимаю почему строка с id 22 не должна попадать
ибо вы пишите что должны попасть строки только с id равными 11 или 33, потому что у них типа f_id = 33 (в вашем примере типа первая строка и последняя). в тоже время у строки с id = 22 тоже f_id = 33, так с какого рожна она не должна попасть?

дайте входной набор данных, параметр который задаете, выходной набор данных который хотите получить.

или пишите внятнее типа:
при передаче переменной @f_id в которой содержится строка целых чисел разделенных запятыми: пример @set @f_id = '12, 13'

из набора данных такого то:
idf_idfv_id1102021120312134121451310

нужно получить строки:
id f_id fv_id3121351310

потому что: текст почему именно эти строки
...
Рейтинг: 0 / 0
24.06.2020, 08:27
    #39972633
hunter79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql. Как получить значение одной колонки, где значение другой равно перечню значений
felix_ff,

Код: sql
1.
2.
3.
4.
5.
6.
7.
id, f_id, fv_id
11, 22, 33
11, 11, 22
11, 33, 11
22, 33, 33
33, 11, 22
33, 22, 33



Задача:
выбрать те значения (id) с таблицы, у которых fv_id равно только переданным значениям.
то-есть, если я передаю fv_id="22,33", то если для записи с id нет значения fv_id=22, то мне такой id не нужен.
в данном конкретном случае мне нужны id="11,33", потому как для них поле fv_id содержит и 22 и 33. для id=22 значение fv_id есть только 33, 22 нет, поэтому оно мне не нужно...
...
Рейтинг: 0 / 0
24.06.2020, 09:47
    #39972640
Ennor Tiegael
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql. Как получить значение одной колонки, где значение другой равно перечню значений
hunter79,

Реляционное деление, что ли?
...
Рейтинг: 0 / 0
24.06.2020, 15:12
    #39972767
felix_ff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql. Как получить значение одной колонки, где значение другой равно перечню значений
hunter79
felix_ff,

Код: sql
1.
2.
3.
4.
5.
6.
7.
id, f_id, fv_id
11, 22, 33
11, 11, 22
11, 33, 11
22, 33, 33
33, 11, 22
33, 22, 33



Задача:
выбрать те значения (id) с таблицы, у которых fv_id равно только переданным значениям.
то-есть, если я передаю fv_id="22,33", то если для записи с id нет значения fv_id=22, то мне такой id не нужен.
в данном конкретном случае мне нужны id="11,33", потому как для них поле fv_id содержит и 22 и 33. для id=22 значение fv_id есть только 33, 22 нет, поэтому оно мне не нужно...


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
declare @t table (
       id int, 
       fv_id int
);

insert into @t values 
(11, 33),
(11, 22),
(11, 11),
(22, 33),
(33, 22),
(33, 33);

declare @fv_id varchar(255) = '33,22';

--вариант 1
with x as (
    select distinct 
          try_cast([value] as int) as [fv_id],
          count(1) over (order by 1/0) as [xcnt]
    from string_split(@fv_id, ',')
),
y as (
    select
          count(x.[fv_id]) over (partition by id order by 1/0 range between unbounded preceding and unbounded following) as tcnt,
          x.xcnt,
          t.[id]
    from (select distinct [id], [fv_id] from @t) t
        left join x on x.[fv_id] = t.[fv_id]
)
select distinct y.[id]
from y
where y.[tcnt] >= y.[xcnt];

--вариант 2
select distinct t.[id]
from @t t
where 0 = (select count(1) from
           (select try_cast([value] as int) from string_split(@fv_id, ',')
            except
            select [fv_id] from @t t2 where t2.[id] = t.[id]
           ) TX ([va])
           );

--вариант 3
select distinct t1.[id]
from @t t1
where t1.[fv_id] = ALL(select distinct try_cast([value] as int) from string_split(@fv_id, ',')
                       except
                       select t2.[fv_id] from @t t2 where t2.[id] = t1.[id]);
...
Рейтинг: 0 / 0
24.06.2020, 16:00
    #39972797
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Sql. Как получить значение одной колонки, где значение другой равно перечню значений
hunter79
felix_ff

Код: sql
1.
select [id] from [ffv] where [fv_id] in (select [value] from string_split(@fv_id, ','));



в данном случае я получу id = 11, 22, 33.
а мне нужно чтобы id = 11, 33.
то-есть, если у id, fv_id=33 (и только), то мне этот id не нужен.


можно перед селектом (см. выше) убрать ненужное

Код: sql
1.
delete from  [ffv] where [fv_id]=33 
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Sql. Как получить значение одной колонки, где значение другой равно перечню значений / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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