2010-09-21 62 views
1

考虑与一列量的表,在SQL中使用情况的select语句

Amount 
-1235.235 
1356.45 
-133.25 
4565.50 
5023 
-8791.25 

我想我的结果窗格中是这样,

Debit Credit 
    0  -1235.235 
1356.45 0 
    0  -133.25 

这里是我的存储过程,

USE [HotelBI_CustomDB] 
GO 
    SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[SP_GetJVReport](
@p_FromDate datetime, 
@p_ToDate datetime 
) 
AS 
BEGIN 
select jv.AccountNo,jv.AccountNoTitle,(select JV_GroupsHead.GroupTitle 
    from JV_GroupsHead where JV_GroupsHead.Id=jv.GroupId) as 'GroupName' 
,jv.Revenue --" This column i need to check and have to split it into two 
       column "credeit,debit"" 

from JVFunction1(@p_FromDate,@p_ToDate) as jv 

END 

如何编写select语句,以便使用amount> = 0的情况作为信用和金额< 0 as deb它?

回答

4

修改根据需要为您的具体需求

SELECT 
    CASE WHEN Amount < 0 THEN ABS(Amount) ELSE NULL AS Debit, 
    CASE WHEN Amount >= 0 THEN Amount ELSE NULL AS Credit 
FROM 
    SomeTable 
1

你的意思是这样的,一个单独的列来指示金额的类型?

SELECT Amount, CASE WHEN Amount < 0 THEN 'Debit' ELSE 'Credit' END AS Type 
FROM SomeTable 
+0

不是量,'Amount'栏应显示为2个DIFF借方和贷方列 – 2010-09-21 10:07:32

+0

@Pandiya类型:也许你可以更新您的问题,以实际显示您所需的输出? – DanP 2010-09-21 10:09:01

+0

@DanP我编辑了我的问题...... – 2010-09-21 10:15:21

0

我可能会创建一个用户定义函数来使这个更容易一些。

例如。

create function dbo.CreditOrDebit (@amount decimal(9,2), @type char(6)) 
returns decimal(9,2) 
as 
begin 
declare @output decimal(9,2); 
select @output = 
    case @type 
    when 'debit' then 
     case 
      when @amount < 0.00 then ABS(@amount) 
      else 0 
     end 
    else 
     case 
      when @amount >= 0.00 then ABS(@amount) 
      else 0 
     end 
    end; 
    return @output; 
end 

然后在你的SELECT语句这样使用它:

select jv.AccountNo,jv.AccountNoTitle,(select JV_GroupsHead.GroupTitle 
    from JV_GroupsHead where JV_GroupsHead.Id=jv.GroupId) as 'GroupName' 
,dbo.CreditOrDebit(jv.Revenue,'debit') as debit 
,dbo.CreditOrDebit(jv.Revenue,'credit') as credit 
+0

Scalar UDF有一些开销。与内联CASE相比,这会比较大的记录集慢得多。 – gbn 2010-09-21 10:37:52

+0

如果UDF包含DML,我就知道是这种情况,但是当UDF只是做一些这样的总和时,我从未注意到任何差异。任何想法为什么它应该更慢? – 2010-09-21 11:02:21