2013-07-05 55 views
0

我需要爲某些從我沒有創建的數據庫中提取數據的帳戶做出聲明。現在這個特定的表格有點奇怪,我無法將其拉下來。基本上,這裏的此刻的查詢......在複雜查詢中抽取一個SQL「IF/Else」

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

我一直在閱讀有關交易和其他的東西,但我不能設法拉出確定的查詢,如果DR_Socio相同@SocioNum然後BalanceDebito成爲平衡列,否則如果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),但我不能擁有BalanceDebito和BalanceCredito兩列。這可能嗎?我很困難,不知道如何繼續。幫助將非常感激。我使用C#,ASP.NET,MVC編程,使用iTextSharp dlls進行PDF創建(並且工作起來非常好),並使用SQL Server 2008作爲數據庫。

+2

Case語句是你所需要的。按照If/elseif的順序進行評估。 – Bill

回答

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 
+0

完美工作。現在我對如何處理進一步查詢有了一個想法,非常感謝Lamak。 –

+0

@ LordRelix沒問題,很高興幫助 – Lamak

+1

對於自我記錄,我總是在END之前添加ELSE語句。在你的情況下,ELSE NULL END – Bill

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 ...