2016-10-05 6 views
2

私は、SQL Serverのクエリデータソリューションを探してい2行の値を1行に変換するにはどうすればよいですか?

Sample data

の下に持っています。

SQLクエリ:

SELECT 
    p.ProjectName, 
    i.ItemName, 
    inv.TransactionDirection, 
    SUM(inv.TransactionQty) AS TransactionQuantity 
FROM INVTransaction inv 
JOIN BDProject p ON p.ProjectID=inv.ProjectID 
JOIN MDItem i ON i.ItemID=inv.ItemID 
GROUP BY p.ProjectName, 
    i.ItemName, 
    inv.TransactionDirection 
+0

SUM(inv.TransactionQty) as Balance 

を置き換えることができる2つの別々のクエリを作成します – Treycos

+0

どのブール条件? –

+0

@JaydipJ TransactionDirectionは私が言っています。 – Jens

答えて

2

私はあなただけで、条件付き集計をしたいと思う:

SELECT p.ProjectName, i.ItemName, 
     SUM(CASE WHEN inv.TransactionDirection = 'IN' THEN inv.TransactionQty ELSE 0 END) as IN_Quantity, 
     SUM(CASE WHEN inv.TransactionDirection = 'OUT' THEN inv.TransactionQty ELSE 0 END) as OUT_Quantity, 
     SUM(CASE WHEN inv.TransactionDirection = 'IN' THEN inv.TransactionQty 
       WHEN inv.TransactionDirection = 'OUT' THEN -inv.TransactionQty 
       ELSE 0 
      END) as Balance 
FROM INVTransaction inv JOIN 
    BDProject p 
    ON p.ProjectID = inv.ProjectID JOIN 
    MDItem i ON i.ItemID = inv.ItemID 
GROUP BY p.ProjectName, i.ItemName 
+0

ありがとうございます。差額が正しくない残高列以外は問題ありません。 –

+0

Gordonによって提案されたクエリをサブクエリとして使用することができます: 'select *、(IN_Quantity - OUT_Quantity)as Balance from( SELECT inv.ProjectName、inv.ItemName、SUM(CASE WHEN inv.TransactionDirection = ' OUT_Quantity FROM(...))t' – owczarek

+0

@ KayserAhmedとしてIN_Quantity、 SUM(INV.TransactionDirection = 'OUT' THEN inv.TransactionQty ELSE 0 END)のようにSUMで指定します。 。 。私は「残高」計算を誤解していました。クエリは今正しくそれを行う必要があります。 –

0

あなたはこのためにピボットを使用することができます。以下は動作中のクエリです。

SELECT PROJECTNAME,ITEMNAME,[IN],[OUT] ,ISNULL([IN],0)-ISNULL([OUT],0) AS BALANCE FROM 
(SELECT PROJECTNAME,ITEMNAME,TRANSACTIONDIRECTION,TRANSACTIONQUANTITY FROM TRANSACTIONS 
)A 
PIVOT (SUM(TRANSACTIONQUANTITY) FOR TRANSACTIONDIRECTION IN ([IN],[OUT])) AS PVT 

@Gordon Linoffほとんど提供される解決策として、あなたのテーブル名

+0

それは働いています、ありがとう。 –

0

との取引を交換しますが、バランスの列のためにあなたは

SUM(CASE WHEN inv.TransactionDirection = 'IN' 
     THEN inv.TransactionQty 
     ELSE -1*inv.TransactionQty END) as Balance 
+0

それは働いています、ありがとうございます。 –

関連する問題