#sql #sql-server
#sql #sql-сервер
Вопрос:
У меня есть таблица с двумя столбцами. В зависимости от длины данных в одном столбце мне нужно присоединиться к следующему столбцу. Как я могу поступить с этим. У меня есть базовый SQL, но я не могу объединить столбцы вместе и отобразить оба данных в одной таблице.
Текущая таблица выглядит следующим образом :
ID Code
---------- ----------
ST01 00
ST0105 05
ET2256 56
После запроса SELECT я хотел бы иметь
ID
----------
ST0100
ST0105
ET2256
Как вы можете видеть, когда ST01 меньше 5 символов, мне нужно будет добавить к нему столбец Code. Когда длина идентификатора больше, мне не нужно добавлять. Как я могу достичь. База данных находится в рабочей стадии, и я не могу редактировать, потому что все старые приложения настроены и запущены. Но приложение, которое я создаю, использует 7-символьный формат. Поэтому я не могу редактировать таблицу. Мне нужно будет выполнить только оператор select.
SELECT
CASE ID
WHEN ((LEN(ID))<>5) THEN ID=(RTRIM(ID) LTRIM(Code))
FROM tblID
ORDER BY ID DESC
Комментарии:
1. Вы говорите, что меньше 5 символов, но вы сравниваете с
unequal 5
, 6 также будут совпадать. Кроме того, не используйте=
в случае:CASE WHEN a=b THEN a ELSE c END AS ID
2. Какова максимально возможная длина идентификатора? Всегда 6 букв?
3. @shree.pat18 Максимальное значение равно 7
Ответ №1:
Основываясь на вашем объяснении, я предполагаю:
SELECT
CASE
WHEN ((LEN(ID))<5) THEN (RTRIM(ID) LTRIM(Code)) ELSE ID END AS ID
FROM tblID
ORDER BY ID DESC
Ваш синтаксис CASE
был немного неточным, так же как и сравнение по длине ( <>5
vs <5
).
Ответ №2:
Попробуйте это:
SELECT
CASE
WHEN LEN(ID) < 6 THEN LEFT(ID Code),6)
ELSE ID
END AS Code
FROM tblID
ORDER BY ID DESC;
Ответ №3:
Попробуйте это:
SELECT
CASE
WHEN LEN(ID) <> 6 THEN SUBSTRING(ID, 1, 6-LEN(Code)) Code
ELSE ID
END as Code
FROM tblID
ORDER BY ID DESC;
Комментарии:
1.
SUBSTRING()
отсутствует аргумент. Кроме того,CONCAT()
это функция 2012 года, и не похоже, что OP четко указал, какая версия используется2. @MarkD С использованием 2005 MSSQL
3. Пожалуйста, смотрите пересмотренный запрос, который совместим с MSSQL 2005, выше.