Проверьте, является ли поле пустым или пустым, и вставьте SQL Server 2008 - PullRequest
0 голосов
/ 01 сентября 2010

Немного ржавый в sql

У меня есть ситуация, когда мне нужно вставить поле "@Amount" во временную таблицу. Если @amount из tableA равно нулю или 0 получить его из таблицыB

Это упрощенный пример того, что я делаю. Это должно быть сделано в операторе выбора при вставке в #CustomerTable Нужен ли мне случай, когда оператор?

DECLARE @Amount DECIMAL(18,4) 

SELECT @Amount=Amount
FROM TableA

INSERT #CustomerTable(id,Name,Amount)
SELECT 1,CustomerName,--if Amount is null or 0 get it from TableB else Get it from Table A.
FROM TableB

Ответы [ 3 ]

1 голос
/ 01 сентября 2010

Довольно близко к ответу @dcp, вместо этого используется подзапрос в выражении case.

INSERT @CustomTable
(
    id,
    Name,
    Amount
)
SELECT 
    1, 
    CustomerName,
    CASE 
        WHEN ISNULL(TableB.Amount,0) > 0 THEN TableB.Amount
        ELSE (SELECT TableA.Amount FROM TableA WHERE 1 = 1) --Replace logic to get value from TableA
    END AS Amount
FROM TableB
1 голос
/ 01 сентября 2010

Поскольку вы используете 2008, я бы крутил новую функцию NULLIF () с помощью функции ISNULL () и использовал подзапрос:

insert @CustomTable (id, name, amount)
select
    1,
    CustomerName,
    ISNULL(NULLIF(TableA.Amount,0),(select Amount from TableB where TableB.ID = TableA.ID))
from
    TableA
1 голос
/ 01 сентября 2010
INSERT #CustomerTable(id,Name,Amount)
SELECT 1,
    CASE
      WHEN Amount IS NULL or Amount = 0 THEN TableA.CustomerName
      ELSE TableB.CustomerName
    END,
    Amount
FROM TableA, TableB
-- need a WHERE clause here to get TableA/TableB records, and you need to make
-- sure you join them properly
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...