Сохранить результат выбора (несколько результатов) в переменной (для последующего использования внутри оператора in) - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь сохранить несколько результатов из запроса выбора в переменную,
Я хочу получать все события, содержащиеся в неделе, я использую «выбрать как» из моей таблицы событий в соответствии с критериями конкретной недели. Я хочу сохранить его как переменную, которую я могу использовать внутри части where в другом запросе, чтобы получить количество клиентов, включенных в число навыков в неделю. Я не могу использовать набор, так как хочу вернуть несколько значений, и в этом, используя выбор, вернуть только последнее значение (на самом деле я получаю сообщение об ошибке, но мое предположение исходит из предыдущего прочтения по теме) Три вещи, в которых я не уверен:

  1. как настроить его для форматирования, чтобы включить его в более поздний
  2. как сохранить несколько значений в моей переменной из Select
  3. форматирование, используемое для достижения строки, разделенной запятой значения (результат между апострофами)

Мой первый запрос (объявлять / выбирать) возвращает все результаты между апострофами. Мне нужно найти способ объединить их, разделить их и сохранить в своей переменной.
Второй запрос работает нормально и возвращает то, что я хочу, если я вручную ввожу разделенные запятыми значения между апострофами в моем значении вместо переменной, так что часть будет в порядке.

Declare @IDC varchar(500);
SELECT @IDC = (SELECT '''' + E.NO_EVENT + '''' FROM TEST_APP.dbo.EVENT E
WHERE E.NO_EVENT like '1819________')

SELECT COUNT(L.SKILL) as qty, L.SKILL FROM TEST.dbo.LEADS L
WHERE L.NO_Event in (@IDC)
group by L.SKILL

Я пробовал небольшие вариации безрезультатно, а также провел некоторые исследования по этому вопросу, но, видимо, могу найти только один результат, сохраненный в виде переменной.
Выполнение вышеуказанного запроса возвращает меня:

Сообщение 512, Уровень 16, Состояние 1, Строка 2 Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Создайте табличную переменную и затем вставьте в нее так:

declare @table table (col1 int, col2 varchar(max))...
insert @table 
select...
0 голосов
/ 08 мая 2018

Вам нужно использовать переменную таблицы / временную таблицу для хранения нескольких значений:

SELECT E.NO_EVENT 
INTO #temp
FROM TEST_APP.dbo.EVENT E
WHERE E.NO_EVENT like '1819________'

Если вы используете SQL Server 2017, вы можете использовать STRING_AGG/STRING_SPLIT:

Declare @IDC varchar(500);
SELECT @IDC = (SELECT STRING_AGG(E.NO_EVENT, ',') 
               FROM TEST_APP.dbo.EVENT E
               WHERE E.NO_EVENT like '1819________');

и затем:

SELECT COUNT(L.SKILL) as qty, L.SKILL FROM TEST.dbo.LEADS L
WHERE L.NO_Event in (SELECT * FROM STRING_SPLIT(@IDC, ',') s)
group by L.SKILL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...