在复杂查询中拉出SQL“IF / Else”

时间:2013-07-05 19:24:45

标签: sql-server sql-server-2008 c#-4.0

我需要为一些从我没有创建的数据库中提取数据的帐户发表声明。现在这个特定的表有点奇怪,我无法将它拉下来。基本上这是现在的查询...

string query = "SELECT Date, TransCode, Amount, BalanceDebito, BalanceCredito FROM ledger WHERE (DR_Socio = @SocioNum) OR (CR_SOCIO = @SocioNum) ORDER BY Date DESC";

我一直在阅读有关TRANSACT和其他内容但我无法提出确定如果DR_Socio与@SocioNum相同,则BalanceDebito变为Balance列,或者如果CR_SOCIO与@相同的查询SocioNum然后名为BalanceCredit的列成为平衡列,如果CR_Socio和DR_Socio列与@SocioNum相同,则它不应传递任何值。基本上....

If DR_Socio = @SocioNum THEN
BalanceDebito as Balance 
Else if CR_Socio @SocioNum then
BalanceCredito as Balance
Else If CrSocio and Dr_Socio = @SocioNum then
Do Nothing
End If

这就是它的要点。我需要将其转换为SQL查询。 BalanceDebito和BalanceCredito是两个不同的列,我需要它们成为一个用于报告目的,因为我正在创建一个PDF(God Bless iTextSharp)但我不能有两个列的BalanceRbito和BalanceCredito。这可能吗?我很困难,不知道如何继续。帮助将非常感激。我在C#,ASP.NET,MVC编程,使用iTextSharp dll进行PDF创建(并且工作得非常好),以及SQL Server 2008用于数据库。

2 个答案:

答案 0 :(得分:1)

此查询应该为您提供所需内容:

SELECT  Date, 
        TransCode, 
        Amount, 
        CASE WHEN DR_Socio = @SocioNum THEN BalanceDebito
        WHEN CR_SOCIO = @SocioNum THEN BalanceCredito END Balance
FROM ledger 
WHERE (DR_Socio = @SocioNum OR CR_SOCIO = @SocioNum)
AND DR_Socio <> CR_SOCIO
ORDER BY [Date] DESC

答案 1 :(得分:1)

CASE声明应该做你想要的:

SELECT

CASE 
    WHEN Cr_Socio = @SocioNum AND Dr_Socio = @SocioNum THEN NULL
    WHEN DR_Socio = @SocioNum THEN BalanceDebito 
    WHEN CR_Socio = @SocioNum THEN BalanceCredito 
END AS Balance 

FROM ...