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