2013-06-19 72 views
1

我有這樣的SQL查詢去:顯示所有記錄(包括null),而無需通過所有記錄

select "Amount", 
    "Month", 
    SCWM.out_menu1Text 
from 
(select sum(II2.LocalTAmountWithoutVAT) as "Amount", 
    ib_string_right('00' || ib_decodedate_month(II.docdate$date), 2) as "Month", 
    sc.id as "Menu" 
from IssuedInvoices2 II2 
join IssuedInvoices II on II.id = II2.parent_id 
left join StoreCards SC on SC.ID = II2.StoreCard_ID 
left join firms F on F.id = II.firm_id 
where 
    ib_decodedate_year(II.docdate$date) = (EXTRACT(YEAR FROM CURRENT_DATE)) 
    and ib_decodedate_month(II.docdate$date) >= @{_od} 
    and ib_decodedate_month(II.docdate$date) <= @{_do} 
    and F.id = '@{_firmID}' 
group by 
    ib_string_right('00' || ib_decodedate_month(II.docdate$date), 2), 
    "Menu") 
left join ABI_StoreCardsWithMenu("Menu") SCWM on SCWM.OUT_StoreCard_ID = "Menu" 
order by 
    SCWM.out_menu1Text 

這個結果:

Result table

但我要實現這一點:

Wanted table http://img32.imageshack.us/img32/9486/mjw7.png

功能ABI_StoreCardsWithMenu("Menu") SCWM需要列「菜單」並返回右側組。例如,在數據庫是「釘」,該函數採用「釘」的ID,並返回組的名稱 - >「01Potrubí一個fitinky」。

之所以得到這麼短表,在SQL查詢中使用條件WHERE子句。如果公司名片公司沒有任何sc.id屬於第二集團「02Nářadí」,然後組將不會出現在結果列表中。

我需要的是解決方案,它顯示所有羣體,但我需要避免在數據庫中的每個記錄讀數(數據庫是如此巨大,在加載所有記錄需要10-20分鐘)。

+0

您的問題標題並不真正是您的實際問題,我無法理解您想要達到的目標。 –

+0

我改寫了我的問題。現在,我希望能更好地解釋我的問題。 – Sk1X1

回答

1

你需要把所有的項目列表,然後LEFT JOIN您的當前查詢(有一些修改)給它。

例如說你有一個表ITEMS與所有的項目名稱(而不是表,這也可能是一個(子)查詢,視圖或可選擇的程序),並重新此表包含的項目數NUMBEROFITEMS(也可以是(子)查詢,查看或可選過程)。

ITEMS包含:

{ { ID=1, NAME='Item 1'}, { ID=2, NAME='Item 2'} } 

而且NUMBEROFITEMS

{ { ITEMID=1, ITEMCOUNT=35 } } 

然後可以使用下面的查詢產生的完整列表:

SELECT 
    i.NAME, 
    COALESCE(ni.ITEMCOUNT, 0) 
FROM ITEMS i 
LEFT JOIN NUMBEROFITEMS ni ON ni.ITEMID = i.ID 

你只需要擴大這對你的具體查詢。

+0

謝謝,我嘗試使用它 – Sk1X1

相關問題