2017-06-12 9 views
0

データベースにこのような列があります。空のためにロードされ、EのためのL:同じテーブルの2列目の値に基づいて1列のデータを分割するにはどうすればよいですか?

Loaded/Empty

マイレージと同じテーブルの列を持つ:私はそれを分ける持つ方法との和を見つけようとしている

Mileage

合計ロードマイルと総空マイルを言う2列に読み込まれて空になっているすべてのマイルに対して合計を計算しますか?このような

何か:私はケースを試してみた Total

、自己が参加し、そしておそらくピボットまたはビューを、私は私が欲しいものを手に入れる方法を見つけ出すことはできません。

+0

あなたが試したことを私たちに見せたいかもしれません。サンプルデータと期待される出力も役立ちます。 – miken32

答えて

1

あなたはIF(actually IIF in SQL Server)試みることができる:

COALESCE(SUM(IF(loaded = 'L', move_distance, 0)),0) AS when_loaded, 
COALESCE(SUM(IF(loaded = 'E', move_distance, 0)),0) AS when_empty 

をテーブルが空(またはまったく一致が得られていないWHERE任意の追加)であるときCOALESCEは病的なケースを可能にし、SUMはNULLを返します。

またはCASE

COALESCE(SUM(CASE WHEN loaded = 'L' THEN move_distance ELSE 0 END), 0) 
+0

私はCoalesceの使用について何かを見ました。私がそれをして、私がそれを働かせることができるかどうかを見てみましょう。 –

+0

構文でIFが許可されているかどうかわからない –

+0

そしてあなたは正しいです。 SQL Serverに適切な機能と回避策を追加しました。 – LSerni

0

最も簡単な私の経験では労働組合としてこのクエリを作成します

Select Loaded, move_distance Move_Loaded, 0 Move_Empty 
from mytable 
where Loaded = 'L' 
UNION 
Select Loaded, 0 , move_distance 
from mytable 
where Loaded = 'E' 

あなただけの和が使いたい場合:

Select Loaded, sum(move_distance) Move_Loaded, 0 Move_Empty 
from mytable 
where Loaded = 'L' 
group by Loaded, 0 
UNION 
Select Loaded, 0 , sum(move_distance) 
from mytable 
where Loaded = 'E' 
group by Loaded, 0 

あなたは可能性がありますあなたのグループから "0"を抜け出せるようにしてください。

0

通常のSQLの簡単な方法は次のとおりです。

SELECT 
SUM(CASE WHEN loaded = 'L' THEN move_distance ELSE 0 END) as 
LoadedMoveDistance 
SUM(CASE WHEN loaded = 'E' THEN move_distance ELSE 0 END) as 
LoadedMoveDistance 
FROM tablename 

他の方法は、以下のようにSQLサーバー固有のピボットを使用することです。

select [L] as Move_distance_loaded, [E] as Move_distance_empty 
from 
(
Select loaded, move_distance from table 
) tb 
PIVOT 
(
SUM(move_distance) 
FOR loaded IN ([L], [E]) 
) As pvt 

上記のコードは正確に提供されているように動作しません。

関連する問題