2017-06-12 51 views
0

我在我的數據庫中有一列,看起來像這樣; L用加載和E爲空:如何根據同一個表中的第二列中的值拆分1列數據?

Loaded/Empty

與同桌行駛里程列:

Mileage

我試圖找到一種方法把它分開和sum ()總計所有的里程已加載並清空爲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 

COALESCE允許病理情況下,當表是空的(或任何其他WHERE產生不匹配),和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 

其他方式是使用Pivot這是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 

你需要嘗試透視的東西,上面的代碼將無法正常工作。

相關問題