Объединять столбцы и не включать столбец, если он имеет нулевое значение? - PullRequest
3 голосов
/ 23 декабря 2011

У меня есть следующая таблица:

ApprovalOrder EntityCode ProjectCode

1 1415 NULL

2 1415 NULL

3 1415 NULL

И следующий код:

    select 
        de.ApprovalOrder + de. EntityCode + isnull(de.ProjectCode, '') as 'RowID'
    from workflow.delegation_engine de
    where EntityCode = 1415 and DelegationCode = 'CAT1'

К сожалению, возвращает аддитивный результат. Я знаю, что это то, что он должен делать, учитывая вышеизложенное, однако, как я могу сделать так, чтобы он объединял результат каждого столбца в один результат, при этом также включал только de.ProjectCode, когда результат не NULL (это могут быть символы или целочисленные значения) .

Например, если бы я выполнял запрос только в первой строке этой таблицы, я бы хотел, чтобы возвращаемый результат был '11415'.

Ответы [ 2 ]

4 голосов
/ 23 декабря 2011

Чтобы быть ясным в том, что вы делаете, я бы сначала бросил каждый элемент в VARCHAR ().

CAST(de.ApprovalOrder AS VARCHAR(16)) + CAST(de.EntityCode AS VARHCAR(16)) + ISNULL(CAST(de.ProjectCode AS VARCHAR(16)), '')

Если вы хотите, чтобы хак избежал явного приведения, начните деривацию со строки ...

'' + de.ApprovalOrder + de.EntityCode + ISNULL(de.ProjectCode, '')
4 голосов
/ 23 декабря 2011

Вы добавляете два целочисленных значения вместо объединения двух строк. Сначала вы должны CAST этих INTEGER типов до VARCHAR перед их объединением.

SELECT  CAST(de.ApprovalOrder AS VARCHAR(32)) 
        + CAST(de.EntityCode AS VARCHAR(32)) 
        + ISNULL(CAST(de.ProjectCode AS VARCHAR(32)), '') as 'RowID'
FROM    workflow.delegation_engine de
WHERE   EntityCode = 1415 
        AND DelegationCode = 'CAT1'

Обратите внимание, что я предположил, что длина строки 32 более чем достаточна для любого преобразования INTEGER (достаточно 10)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...