SQL Server - Использование комбинированного столбца в предложении WHERE - PullRequest
0 голосов
/ 02 июня 2018

У меня проблемы с использованием комбинированного столбца в предложении WHERE.Я пытаюсь объединить два столбца и сделать WHERE x IN (a, b, c) для фильтрации строк.

Вот мои данные:

Tag      Param
------   -----
TI-123   LL
TI-123   LO
FI-321   LO
FI-321   BAD

Вот что я пытаюсь:

SELECT [Tag] + '.' + [Param] AS 'TagParam' 
   FROM Tags
   WHERE 'TagParam' IN ('TI-123.LL', 'TI-123.LO')

Результаты никогда не совпадают с предложением WHERE и всегда оказываются пустыми.Я мог бы хранить отдельные строки и использовать WHERE с множеством AND и OR, но это намного сложнее для чтения.У меня будет около 100 элементов в выражении IN ().

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Вот как я бы написал:

SELECT [Tag] + '.' + [Param] AS 'TagParam' 
FROM Tags
WHERE Tag = 'TI-123'
  AND Param IN ('LL', 'LO')

Это делает его пригодным для использования (может использовать индексы).

0 голосов
/ 02 июня 2018

Нельзя использовать псевдоним таблицы, определенный в SELECT в соответствующем WHERE.Помещение в одинарные кавычки вещей просто запутывает проблему, превращая вещи в строковые константы.

Повторите выражение:

SELECT ([Tag] + '.' + [Param]) AS TagParam
FROM Tags
WHERE ([Tag] + '.' + [Param]) IN ('TI-123.LL', 'TI-123.LO');

Если вы не хотите повторять выражение, вы можете использоватьподзапрос, CTE или боковое соединение (ключевое слово apply).Но твое выражение достаточно простое.

...