2009-06-01 19 views
2

私は一緒に参加したい5の質問があります。基本的には、データベースを経由してどれくらいの賃金を支払ったのか、借り手がどれくらい前に告発されたかに基づいてテナントが負う額を選択します。これらのクエリをどのように組み合わせることができますか?

I持っている四つのカテゴリー
充電< 30日
充電< 60 AND> = 30日
充電< 90 AND> = 60日齢
チャージ>古い90日、私が知っている

どのようにそれらの価値を別々に得るか、それをどのように一緒にすることができますか?ここで

は私のクエリは、次のとおりです。
テナントが

SELECT TransactionCode, TenantID, SUM(Amount) AS Paid FROM tblTransaction 
WHERE Amount > 0 
GROUP BY TransactionCode, TenantID 

を支払った料金は

30日以内で充電が、60日未満古い額29日以上

SELECT TransactionCode, TenantID, SUM(Amount) AS ChargedOver30 FROM tblTransaction 
WHERE Amount < 0 AND TransactionDate > DATEADD("dd", -60, GETDATE()) AND TransactionDate <= DATEADD("dd", -30, GETDATE()) 
GROUP BY TransactionCode, TenantID 

チャージが90日未満古いですが、より古い59日

SELECT TransactionCode, TenantID, SUM(Amount) AS ChargedOver60 FROM tblTransaction 
WHERE Amount < 0 AND TransactionDate > DATEADD("dd", -90, GETDATE()) AND TransactionDate <= DATEADD("dd", -60, GETDATE()) 
GROUP BY TransactionCode, TenantID 

チャージが89日、私は1でこれら全てを取得できますか

SELECT TransactionCode, TenantID, SUM(Amount) AS ChargedOver90 FROM tblTransaction 
WHERE Amount < 0 AND TransactionDate <= DATEADD("dd", -90, GETDATE()) 
GROUP BY TransactionCode, TenantID 

より古いですクエリ?

答えて

7

それはこのように行うことができます。tblTransaction FROM [DaysLate]として

SELECT TransactionCode, TenantID, 
SUM(CASE WHEN Amount > 0 then Amount ELSE 0 END) AS Paid, 
SUM(CASE WHEN Amount < 0 AND TransactionDate > DATEADD("dd", -30, GETDATE()) THEN Amount ELSE 0 END) AS ChargedCurrent, 
SUM(CASE WHEN Amount < 0 AND TransactionDate > DATEADD("dd", -60, GETDATE()) AND TransactionDate <= DATEADD("dd", -30, GETDATE()) THEN Amount ELSE 0 END) AS ChargedOver30 
SUM(CASE WHEN Amount < 0 AND TransactionDate > DATEADD("dd", -90, GETDATE()) AND TransactionDate <= DATEADD("dd", -60, GETDATE()) then Amount Else 0 END) AS ChargedOver60, 
SUM(CASE WHEN Amount < 0 AND TransactionDate <= DATEADD("dd", -90, GETDATE()) THEN Amount ELSE 0 END) AS ChargedOver90 
FROM tblTransaction 
GROUP BY TransactionCode, TenantID 
+0

メッセージレベル102、レベル15、状態1、行2 ')'の近くの構文が正しくありません。 – Malfist

+0

CASE文の最後に「END」が必要です。これはT-SQL – Malfist

+0

です。 .... –

1

UNIONを使用して結果セットを結合すると機能します。ピボット(PIVOT)機能を使用して翻訳して、金額を別々の列に入れることができます。申し訳ありませんが私は具体的にはできません、私はメモを持っていないと私は頭の上からこのものの正確な構文を知らない。

0

は、各クエリにChargedCurrent、30 AS

SELECT TransactionCode、TenantID、SUM(金額)の余分な列を追加します。.. 。

、その後、UNION一緒

1

あなたはすべて5つの個々のクエリで同じクエリの投影や形状を作ることができれば、あなたができるすべてのクエリユニオンを使用してクエリを単一の結果に結合するだけでなく、結果を順序付けることもできます。

SELECT TransactionCode, TenantID, SUM(Amount) [Amount], 'Paid' [Status] 
FROM tblTransactionWHERE Amount > 0 
GROUP BY TransactionCode, TenantID 

union 

SELECT TransactionCode, TenantID, SUM(Amount) [Amount], 'Charged Current' [Status] 
FROM tblTransactionWHERE Amount < 0 AND TransactionDate > DATEADD("dd", -30, GETDATE()) 
GROUP BY TransactionCode, TenantID 

union 

SELECT TransactionCode, TenantID, SUM(Amount) [Amount], 'ChargedOver30' [Status] 
FROM tblTransactionWHERE Amount < 0 AND TransactionDate > DATEADD("dd", -60, GETDATE()) AND TransactionDate <= DATEADD("dd", -30, GETDATE()) 
GROUP BY TransactionCode, TenantID 

union 

SELECT TransactionCode, TenantID, SUM(Amount) [Amount], 'ChargedOver60' [Status] 
FROM tblTransactionWHERE Amount < 0 AND TransactionDate > DATEADD("dd", -90, GETDATE()) AND TransactionDate <= DATEADD("dd", -60, GETDATE()) 
GROUP BY TransactionCode, TenantID 

union 

SELECT TransactionCode, TenantID, SUM(Amount) [Amount], 'ChargedOver90' [Status] 
FROM tblTransactionWHERE Amount < 0 AND TransactionDate <= DATEADD("dd", -90, GETDATE()) 
GROUP BY TransactionCode, TenantID 

order by 4 --Status 
+0

5行に分散するのではなく、すべての行を1行で取得する方法はありますか? – Malfist

1

このクロスタブクエリは動作するはずです::I'veeは一貫性があると電荷があなたの結果からフィルタリングするためにある状態を表すために最後の列を修正

SELECT 
Case WHEN Amount > 0 Then Amount Else 0 End as [Total], 
Case WHEN Amount < 0 AND TransactionDate > DATEADD("dd", -30, GETDATE()) 
    Then Amount Else 0 End as [Charge 0-29 Days], 
Case WHEN Amount < 0 AND TransactionDate > DATEADD("dd", -60, GETDATE()) AND TransactionDate <= DATEADD("dd", -30, GETDATE()) 
    Then Amount Else 0 End as [Charge 30-59 Days], 
Case WHEN Amount < 0 AND TransactionDate > DATEADD("dd", -90, GETDATE()) AND TransactionDate <= DATEADD("dd", -60, GETDATE()) 
    Then Amount Else 0 End as [Charge 60-89 Days], 
Case WHEN Amount < 0 AND TransactionDate <= DATEADD("dd", -90, GETDATE()) 
    Then Amount Else 0 End as [Charge 90+ Days], 

tblTransaction FROM GROUP BY TransactionCode、TenantID

+0

よくラット、ミスはそれに私を打つ。なぜ私は更新通知を受け取っていないのですか? – RBarryYoung

関連する問題