2014-12-03 138 views
0

下面是我的sql查詢,我已經把一些MAX(table_name),因爲當使用group by時,我不能只放表名。如果我放了MAX,當有varchar值時需要一些時間來執行,請爲varchar而不是MAX給出合適的聚合函數。複雜的分組查詢

此外,那些MAX(table_name)都是相同的值,沒有不同,我只需要打印它。

select distinct 
    t1.PartyName as Customer_Name, 
    SUM(t2.Amount) as Bill_Amount, 
    MAX(t2.VoucherNumber) as Invoice_Number, 
    SUM(i.Weight * t2.Aqty) as Weight, 
    CEILING(SUM(i.CBM * (t2.Aqty/c.Nos))) as CBM, 
    MAX(p.Channel) as Type, 
    MAX(p.RouteNo) as RouteNo, 
    MAX(t1.Adress3) as City 
from 
    Item i, 
    Party p, 
    Tran1 t1, 
    VTran2 t2, 
    Cases c 
Where 
    t1.VoucherNumber=t2.VoucherNumber and 
    t2.ItemName=i.Itemname and 
    p.PartyName=t1.PartyName and 
    t2.ItemName=c.ItemName and 
    p.RouteNo='" + routeNo1comboBox.Text + "' and 
    t1.LoadingStatus IS NULL and 
    t1.Date BETWEEN '" + startDate + "' and '" + endDate + "' 

GROUP BY t1.PartyName 
+1

您的'連接'條件可能是錯誤的。修復您的查詢以使用propoer'join'語法,並且這可能會解決您的問題。 – 2014-12-03 12:32:34

+0

如果'table_name'對於所有記錄都是相同的,那麼爲什麼你需要對它執行一個聚合函數,只需將它包含在'SELECT'列表中即可。 – 2014-12-03 12:35:12

+0

嗨,戈登,感謝您的回覆,您能否以我的加入示例爲我提供小修改?之後,我可以輕鬆地趕上。 – Safa 2014-12-03 12:35:59

回答

0

「另外,那些MAX(table_name)都是相同的值,沒有不同,我只需要打印它。」

爲什麼你不能僅僅通過選擇列表和組添加它們呢?

這一個不行?

select distinct 
    t1.PartyName as Customer_Name, 
    SUM(t2.Amount) as Bill_Amount, 
    t2.VoucherNumber as Invoice_Number, 
    SUM(i.Weight * t2.Aqty) as Weight, 
    CEILING(SUM(i.CBM * (t2.Aqty/c.Nos))) as CBM, 
    p.Channel as Type, 
    p.RouteNo as RouteNo, 
    t1.Adress3 as City 
from Item i, Party p, Tran1 t1, VTran2 t2, Cases c 
Where t1.VoucherNumber=t2.VoucherNumber 
and t2.ItemName=i.Itemname 
and p.PartyName=t1.PartyName 
and t2.ItemName=c.ItemName 
and p.RouteNo=''' + routeNo1comboBox.Text + ''' 
and t1.LoadingStatus IS NULL 
and t1.Date BETWEEN ''' + startDate + ''' and ''' + endDate + ''' 
GROUP BY t1.PartyName, cs,t2.VoucherNumber,p.Channel,p.RouteNo,t1.Adress3 
+1

非常感謝Alexandru Aliu爲您提供簡單易用的修改解決方案。 – Safa 2014-12-03 12:50:16

0

您不必添加distinct,因爲你已經通過t1.PartyName,t2.VoucherNumber,p.Channel,p.RouteNo,t1.Adress3分組。

select 
    t1.PartyName as Customer_Name, 
    SUM(t2.Amount) as Bill_Amount, 
    t2.VoucherNumber as Invoice_Number, 
    SUM(i.Weight * t2.Aqty) as Weight, 
    CEILING(SUM(i.CBM * (t2.Aqty/c.Nos))) as CBM, 
    p.Channel as Type, 
    p.RouteNo as RouteNo, 
    t1.Adress3 as City 
from Item i, Party p, Tran1 t1, VTran2 t2, Cases c 
Where t1.VoucherNumber=t2.VoucherNumber 
and t2.ItemName=i.Itemname 
and p.PartyName=t1.PartyName 
and t2.ItemName=c.ItemName 
and p.RouteNo=''' + routeNo1comboBox.Text + ''' 
and t1.LoadingStatus IS NULL 
and t1.Date BETWEEN ''' + startDate + ''' and ''' + endDate + ''' 
GROUP BY t1.PartyName, cs,t2.VoucherNumber,p.Channel,p.RouteNo,t1.Adress3