我在我的數據庫中有一列,看起來像這樣; L用加載和E爲空:如何根據同一個表中的第二列中的值拆分1列數據?
與同桌行駛里程列:
我試圖找到一種方法把它分開和sum ()總計所有的里程已加載並清空爲2列,這將表示總里程和總空里程?
我試過的情況下,自連接,可能是一個支點或視圖,我無法弄清楚如何得到我想要的東西。
我在我的數據庫中有一列,看起來像這樣; L用加載和E爲空:如何根據同一個表中的第二列中的值拆分1列數據?
與同桌行駛里程列:
我試圖找到一種方法把它分開和sum ()總計所有的里程已加載並清空爲2列,這將表示總里程和總空里程?
我試過的情況下,自連接,可能是一個支點或視圖,我無法弄清楚如何得到我想要的東西。
你可以嘗試的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)
我確實看到了一些關於使用Coalesce的東西。讓我擺弄一下,看看我能否實現它。 –
不知道語法是否允許那些IF的 –
而你是對的。爲SQL Server添加了適當的功能,並提供瞭解決方法。 – LSerni
最簡單的在我的經驗是創建這個查詢作爲工會:
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」。
簡單的方法與正常的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
你需要嘗試透視的東西,上面的代碼將無法正常工作。
您可能想告訴我們您嘗試過什麼。樣本數據和預期的輸出也會有所幫助。 – miken32