SQL Server: как обращаться с нулями как с нулями - PullRequest
5 голосов
/ 22 октября 2009

Вот пример того, что я пытаюсь сделать:

Select
S1.Name as S1Name,
S1.Itemcontent as S1ItemContent,
...
S2.Name as S2Name,
S2.Name as S2ItemContent,
**(S1.OrderValue * 1000*1000 + S2.OrderValue*1000 +  S3.OrderValue) as OrderValue**
From (joining s1, s2 and s3 on a particular value)
Order by OrderValue

Если S1.OrderValue, S2.OrderValue или S3.OrderValue имеют значение NULL, то OrderValue также становится NULL. В этом случае я хочу, чтобы SQL Server рассматривал пустые значения как 0. Как я могу это сделать?

Ответы [ 6 ]

11 голосов
/ 22 октября 2009

Использование функции isNull, например

isnull(s1.ordervalue,0)

Если значение равно нулю, в качестве второго значения используется альтернативное значение, указанное вами.

4 голосов
/ 22 октября 2009

COALESCE(Value, 0) или ISNULL(Value, 0)

3 голосов
/ 22 октября 2009

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

SELECT title, price,
        Budget = CASE price
         WHEN price > 20.00 THEN 'Expensive'
          WHEN price BETWEEN 10.00 AND 19.99 THEN 'Moderate'
          WHEN price < 10.00 THEN 'Inexpensive'
          ELSE 'Unknown'
        END,
FROM titles

Возвращает следующее:

Title                  Price       Budget
---------------------- ----------- ---------------
Cooking with Computers 11.95       Moderate
Straight Talk About Co 19.99       Moderate
The Busy Executive's D 19.99       Moderate
You Can Combat Compute 2.99        Inexpensive
Silicon Valley Gastron 19.99       Moderate
The Gourmet Microwave  2.99        Inexpensive
But Is It User Friendl 22.95       Expensive
Secrets of Silicon Val 20.00       Moderate
Net Etiquette          (null)      Unknown   

Пример взят здесь (http://www.craigsmullins.com/ssu_0899.htm)

3 голосов
/ 22 октября 2009

Используйте T-SQL Coalesce , чтобы вызвать ненулевой ответ. Например:

COALESCE(S1.OrderValue, 0)

... будет принимать значение OrderValue, если оно не равно NULL, в этом случае берется 0.

3 голосов
/ 22 октября 2009

Coalesce возвращает первое ненулевое значение.

**(coalesce(S1.OrderValue,0) * 1000 + coalesce(S2.OrderValue,0)*1000 +  coalesce(S3.OrderValue,0)) as OrderValue
2 голосов
/ 22 октября 2009

Использовать ISNULL (S1.ORDERVALUE, 0)

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