2015-11-05 49 views
-3

我正在從SQL查詢中提取數據。我得到以下格式數據如何分組Sql數據及其小計

S.no  name   budget 
--------------------------------- 
1  Local Travel  123 
2  Global Travel 123 
3  Local Expense  12 
4  Current Expense 12 

這個結果我得到,但我想要的是,請對下面的表格格式

Travel 

    1 Local Travel  123 
    2 Global Travel 123 
      subtotal = 246 

Expense 

    3 Local Expenses 12 
    4 Current Expe  12 
     Subtotal =  24 

請大家幫幫忙看看。我貼我這裏實際查詢

SELECT 
    concat([Segment_0], '-' , [Segment_1], '-' , [Segment_2]), 
    T2.[AcctName], 
    T5.[Name], 
    SUM(T0.[Debit]) as Actual, 
    SUM(T3.[DebLTotal]) as Budget 
FROM 
    JDT1 T0 
INNER JOIN 
    OJDT T1 ON T0.[TransId] = T1.[TransId] 
INNER JOIN 
    OACT T2 ON T0.[Account] = T2.[AcctCode], OBGT T3 
INNER JOIN 
    BGT1 T4 ON T3.[AbsId] = T4.[BudgId] 
INNER JOIN 
    OBGS T5 ON T3.[Instance] = T5.[AbsId],OASC T6 
WHERE 
    T2.[AcctName] LIKE '%Travel%' 
    AND T5.[Name] = 'Main Budget 2015' 
GROUP BY 
    concat([Segment_0], '-' , [Segment_1], '-' , [Segment_2]), 
    T2.[AcctName], T5.[Name] 

我爲我的表添加腳本Please check here

回答

0

我會先保存在一個臨時表查詢的結果,所以我可以讓你表現出的觀點,如這樣的:

S.no  name   budget 
--------------------------------- 
1  Local Travel  123 
2  Global Travel 123 
3  Local Expense  12 
4  Current Expense 12 

爲了做到這一點,只要把插入到#testTable之前你from 這樣的:

... 
SUM(T3.[DebLTotal]) as Budget 
into #testTable 
FROM 
    JDT1 T0 
.... 

然後用上面#myTemp的看法,我會簡單的寫:

select sno, name, budget, 
(case 
when name like '%Travel' then right(name, 6) 
when name like '%Expense%' then right(name,7) 
end) as NameTrim 
into #myTemp 
from #testTable 

上面的查詢創建一個名爲NameTrim能夠費用或旅行區分另一列。

然後我用一個窗口函數GROUP BY:

select sno, name, budget,NameTrim, 
(case 
when NameTrim like 'Travel' then 
sum(budget) over (partition by NameTrim)end) as TravelCost, 
(case 
when NameTrim like 'Expense' then 
sum(budget) over (partition by NameTrim)end)as Expense 
from #myTemp 

仿真環境:

create table #testTable (sno int, name varchar (50), budget int) 

insert into #testTable values 
('1', 'Local Travel' , '123'), 
('2', 'Global Travel' , '123'), 
('3', 'Local Expense' , '12'), 
('4', 'Curent Expense' , '12') 

select sno, name, budget, 
(case 
when name like '%Travel' then right(name, 6) 
when name like '%Expense%' then right(name,7) 
end) as NameTrim 
into #myTemp 
from #testTable 

select sno, name, budget,NameTrim, 
(case 
when NameTrim like 'Travel' then 
sum(budget) over (partition by NameTrim)end) as TravelCost, 
(case 
when NameTrim like 'Expense' then 
sum(budget) over (partition by NameTrim)end)as Expense 
from #myTemp 

這是否解決問題了嗎?似乎工作得很好,查詢得到:

sno name   budget NameTrim  TravelCost Expense 
3 Local Expense 12  Expense  NULL   24 
4 Curent Expense 12  Expense  NULL   24 
1 Local Travel 123  Travel  246    NULL 
2 Global Travel 123  Travel  246    NULL 
+0

什麼是#mytable?以及在哪裏添加這個東西..我沒有得到。請你清楚地提及。只需在給定查詢中添加此代碼即可獲得更多許可。 – KaurSukh

+0

如果你沒有得到這個,我非常懷疑你在你的問題中編寫了代碼。但是爲了幫助你,我會解釋一下:在你的代碼中,你說它是'真正的查詢',在這行'SUM(T3。[DebLTotal])作爲預算'之後'只需將'添加到#myTemp'中,這將會創建一個臨時表,在這個臨時表中,您將擁有與第一個示例數據一樣的數據結構,您的話就是:「跟隨格式數據」。然後你可以簡單地使用我建議的查詢。請檢查該sno或s.no的名稱,並將其調整爲您擁有的任何名稱。 – CM2K

+0

它不工作。給我子查詢返回超過1個值。當子查詢遵循=,!=,<, <= , >,> =或當子查詢用作表達式時,這是不允許的。 – KaurSukh