SQL查询有条件地将列中的数据放入查询创建的2列之一

时间:2017-04-11 04:04:35

标签: sql sql-server

数据存储在以下列的表格中:

Date, Reference, Amount

Amount可以是借记或贷记价值。

我需要一个查询,在AMOUNTDebit列(由查询添加)中返回Credit列,如下所示:

Date          Ref          Debit      Credit
2017/04/10    ABC123      500.00
2017/04/11    XYZ321                 -500.00

我已尝试使用CASE语句,但无法正确添加DebitCredit列的语法:

select 
    date, ref, amount, 
    case 
       when amount >= 0 
          then amount as debit 
       when amount < 0 
          then amount as credit 
    end 
from 
    dtrans

4 个答案:

答案 0 :(得分:0)

IIF for 2012+否则CASE

select date, ref, 
    IIF(amount>=0,amount,0) debit,
    IIF(amount<0,amount,0) credit
from dtrans

更新

  select date, ref, 
        IIF(amount>=0,iif(amount=0,'',amount),0) debit,
        IIF(amount<0,amount,0) credit
    from dtrans

答案 1 :(得分:0)

试试这个

create table #temp(Mydate date, ref varchar(10), amount int)

insert into #temp values (getdate(),'ABC123',500)

insert into #temp values (getdate()+10,'XYZ321',-500)

    select Mydate, ref, amount, 
case when amount>=0 then amount else null end as debit,
case when amount<0 then amount else null end as credit
     from #temp

答案 2 :(得分:0)

试试这个:

select date, ref, amount, 
    case when amount>=0 then amount else null end  as Debit,
      case when amount<0 then amount else null end  as Credit 

from dtrans

答案 3 :(得分:-1)

请尝试以下方法......

SELECT date,
       ref,
       CASE
           WHEN ISNULL( debit, 0 ) > 0 THEN
               debit
           ELSE
               credit 
       END AS amount
FROM dtrans

上述内容按正常情况选择dateref。然后,它会测试debit字段以查看它是否包含NULL值,如果有,则返回0,如果不存在,则返回debit的值。然后将此返回值与0进行比较。因此,如果debit的值不是NULL,则CASE条件成功,并选择debit的值。如果CASE条件失败,则选择credit的值。无论选择debit还是credit,都会将SELECT语句作为amount的值返回,这意味着我们的SELECT将始终返回以下内容字段...

date
ref
amount

如果您有任何问题或意见,请随时发表评论。