Изменить возвращаемое значение оператора SELECT (TSQL) [Оптимизирующий запрос] - PullRequest
1 голос
/ 21 апреля 2010

Проблема: Столбец базы данных имеет Tristate (0,1,2). Каждое из значений используется на сервере.

Код клиента (который больше не может быть изменен) может понимать только «0,1». В представлении клиентов «1» совпадает с «2». Поэтому я хочу изменить SQL-запрос в базе данных, чтобы он возвращал «1», если конкретное значение> 0.

Мое текущее решение объединяет 2 выбора (с помощью UNION SELECT) с различными предложениями WHERE и возвращением 1 или 0 в качестве статических значений. Сейчас я ищу решение для «перевода» значения только в одном выражении SELECT.

Это мое текущее решение:

 SELECT
dbo.Nachricht.NachrichtID, dbo.Nachricht.Bezeichnung, '1' AS BetrifftKontoeinrichtung, 
FROM         dbo.Nachricht INNER JOIN dbo.AdditionalData
ON dbo.Nachricht.NachrichtID = dbo.AdditionalData.NachrichtID

WHERE     (dbo.Nachricht.NachrichtID in ( 450,439 ))
AND dbo.AdditionalData.BetrifftKontoeinrichtung > 0

UNION SELECT
dbo.Nachricht.NachrichtID, dbo.Nachricht.Bezeichnung, '0' AS BetrifftKontoeinrichtung, 
FROM         dbo.Nachricht INNER JOIN dbo.AdditionalData
ON dbo.Nachricht.NachrichtID = dbo.AdditionalData.NachrichtID

WHERE     (dbo.Nachricht.NachrichtID in ( 450,439 ))
AND dbo.AdditionalData.BetrifftKontoeinrichtung = 0

Ответы [ 3 ]

4 голосов
/ 21 апреля 2010

Вы можете использовать оператор case, например:

SELECT
   dbo.Nachricht.NachrichtID, dbo.Nachricht.Bezeichnung, 
   CASE WHEN dbo.AdditionalData.BetrifftKontoeinrichtung = 0 
        THEN '0' ELSE '1' 
   END AS BetrifftKontoeinrichtung, 
FROM dbo.Nachricht
INNER JOIN dbo.AdditionalData
        ON dbo.Nachricht.NachrichtID = dbo.AdditionalData.NachrichtID    
WHERE (dbo.Nachricht.NachrichtID in ( 450,439 ))
2 голосов
/ 21 апреля 2010

Похоже, вам нужно использовать CASE.Приличный учебник здесь http://www.databasejournal.com/features/mssql/article.php/3288921/T-SQL-Programming-Part-5---Using-the-CASE-Function.htm

См. Обработанный пример

0 голосов
/ 21 апреля 2010

Если вы просто CAST(CAST(val AS BIT) AS INT), вы получите целое число 0 для 0 и целое число 1 для всего остального.

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