Как просмотреть строку или обновить столбец в таблице базы данных в зависимости от значений других столбцов? - PullRequest
0 голосов
/ 04 ноября 2010

У меня есть такая таблица базы данных: -

Table1

Column1 : Varchar(50)
Column2 : Varchar(50)
Column3 : Boolean
Column4 : Varchar(50)
Column5 : Varchar(50)

Я хотел бы создать фиктивный столбец - или добавить новый столбец в таблицу - при запуске SQLоператор, так что значение этого столбца будет содержать строку, указывающую насыщенность элемента строки в зависимости от более чем одного из этих столбцов.Я имею в виду, имеют ли эти столбцы нулевые значения или нет.

Логический способ представить, что: -

Выбрать переключатель DummyColumn

"status1" Case column1 IS NOT NULL
"status2" Case column2 IS NOT NULL
"status3" Case column3 IS NOT NULL
"status4" Case column1 IS NOT NULL AND column2 IS NOT NULL
"status5" Case column2 IS NOT NULL AND column3 IS NULL
"status6" Case column2 IS NOT NULL OR column3 IS NOT NULL

Из таблицы 1;

В Business Logic я могу сказать, что хочу отобразить строку, указывающую состояние элемента в базе данных, углубляющегося во многие другие столбцы состояния, которые могут быть булевыми или строковыми, и это состояние может иметь много значений в соответствии со значениями, хранящимися вэти столбцы таблицы.

Мой движок базы данных - Sybase.

Как я могу построить свой SQL-запрос для этого?как называется этот вопрос?Как я могу найти или найти это?Я не знаю, в какой теме я могу найти это?Я ищу информацию о слиянии, объединении, замене, NVL и объединении, но не могу найти то, что ищу ..

Заранее спасибо, и я надеюсь, что я правильно сформулирую свой вопрос и что он является дубликатом, и янадеюсь найти хороший ответ на него как можно скорее ..

Ответы [ 2 ]

1 голос
/ 04 ноября 2010

Использование одного предложения CASE:

SELECT  Column1,
        Column2,
        Column3,
        Column4,       
        Column5,
        Column6,
        CASE WHEN Column1 IS NOT NULL AND Column2 IS NOT NULL THEN 'status4'
             WHEN Column2 IS NOT NULL AND Column3 IS NULL THEN 'status5'
             WHEN Column1 IS NOT NULL THEN 'status1'
             WHEN Column2 IS NOT NULL THEN 'status2'
             WHEN Column3 IS NOT NULL THEN 'status3'
             WHEN Column2 IS NOT NULL OR Column3 IS NOT NULL THEN 'status6'
        END  AS Dummy_Column
FROM    Table1

Примечание.Status6 никогда не будет возвращен, потому что он будет переопределен Status1 или Status2, даже если Status4 и Status5 не применимы.

0 голосов
/ 04 ноября 2010

Существует несколько способов снять шкуру с кошки, это один из них.

SELECT  t.Column1
        , t.Column2
        , t.Column3
        , t.Column4        
        , t.Column5
        , t.Column6
        , COALESCE(Status1, Status2, Status3, Status4, Status5, Status6) AS DummyColumn
FROM    (
          SELECT  *
                  , CASE WHEN Column1 IS NOT NULL THEN 'status1' ELSE NULL END AS Status1
                  , CASE WHEN Column2 IS NOT NULL THEN 'status2' ELSE NULL END AS Status2
                  , CASE WHEN Column3 IS NOT NULL THEN 'status3' ELSE NULL END AS Status3
                  , CASE WHEN Column1 IS NOT NULL AND Column2 IS NOT NULL THEN 'status4' ELSE NULL END AS Status4
                  , CASE WHEN Column2 IS NOT NULL AND Column3 IS NULL THEN 'status5' ELSE NULL END AS Status5
                  , CASE WHEN Column2 IS NOT NULL OR Column3 IS NOT NULL THEN 'status6' ELSE NULL END AS Status6
          FROM    Table1
        ) t

Обратите внимание, что это работает с использованием SQL Server, но, поскольку в нем нет запутанных конструкций, преобразовать его в SyBase должно быть относительно легко.

...