如何在SQL Server的select语句中分两列中的列?

时间:2016-02-11 06:55:57

标签: sql-server

我有一个名为Voucher的表,其中包含以下列:

V_id big int,
V_Date Date,
V_Type Char(2),
Amount money,
Nature Char(10),
V_No big int,
Ledger_Id var char(20),

现在我想生成一个名为columns的报告,

V_Date, Ledger_Id, V_No, V_Type, Credit_Amount, Debit_Amount.

其中Debit_AmountCredit_Amount来自名为Amount的同一列,具体取决于条件nature = Credit,然后金额将进入Credit_Amount并且在借记卡中,它将在同一行中为0。

如果Nature = debit然后Amount将进入Debit_Amount列并且此行Credit_Amount中的 jQuery('.board_content').jscroll({ loadingHtml: '<div class="loading_div"><center><img src="layouts/wb10/ajax-loader4.gif" alt="Loading" /></center></div>', padding: 0, contentSelector: '.board_list', autoTriggerUntil: 30, nextSelector:'.next_button', callback: function() { jQuery('.list_container').masonry({ // options itemSelector: '.list_container', columnWidth: 50, }); 将为0,则另一个条件相同。

如何在单个查询中完成此操作?或者我需要多次查询吗?

3 个答案:

答案 0 :(得分:2)

使用Case when它会对您有帮助,

select 
  V_Date, 
  Ledger_Id, 
  V_No, 
  V_Type, 
  case when Nature = 'Credit' then Amount  else 0 end Credit_Amount, 
  case when Nature = 'Debit' then Amount  else 0 end Debit_Amount 
from voucher

希望这会有所帮助......

答案 1 :(得分:0)

尝试这个

CASE 
   WHEN NATURE = 'CREDIT' 
      THEN AMOUNT 
      ELSE 0 END AS Credit_Amount, 
CASE 
   WHEN NATURE = 'DEBIT' 
      THEN AMOUNT 
      ELSE 0 END AS Debit_Amount

答案 2 :(得分:0)

如果条件包含列的别名,则可以添加两个:

SELECT 
    *,
    IF(Nature='Credit', amount, 0) AS Credit_Amount, 
    IF(Nature='debit', amount, 0) AS Debit_Amount 
FROM <table_name>;

虽然我在MYSQL中尝试了这一点,但在任何DBMS中它都是非常可能的。