2014-12-23 77 views
2

的結果,我對我在使用UNION同樣的結果集已經返回相同的db表兩個單獨的查詢。我被卡住的地方是我現在想要對結果運行GROUP BY,但我沒有成功。目前在每個UNION中(這很好!)通過「name_of_asset」發生了分組,但是在最終結果中每個「name_of_asset」都有兩行 - 每個內部select都有一行。所以,雖然查詢的其餘部分是可以的,但下面的最後一個GROUP BY並沒有完成我想要做的事情。事實上,我沒有看到它對我的數據有任何影響,我只是將其包含在下面以突出顯示我已經嘗試過的內容。如何正確使用GROUP BY上的Sybase SQL子查詢

請注意,我正在嘗試使用臨時表完成以下而不使用

SELECT TOP 4 asset, name_of_asset, usd_today, usd_prev 
FROM 
(
SELECT 'Asset' asset, name_of_asset, SUM(usd)/1000 usd_today, 0 usd_prev 
FROM my_db..my_table 
WHERE the_date = '9/30/2014' 
AND asset = 'A' 

UNION ALL 

SELECT 'Asset' asset, name_of_asset, 0 usd_today, SUM(usd)/1000 usd_prev 
FROM my_db..my_table 
WHERE the_date = '8/29/2014' 
AND asset = 'A' 
) x 

GROUP BY x.name_of_asset 
ORDER BY x.usd_notional DESC 

*此外,然後對其進行評論請注意,我改變了所有的數據庫,表和列名,以便沒有我其實有一個叫DB「MY_DB」「MY_TABLE」表的工作沒有崗位。 ..give我一些信用我命名約定技能略低於更好,p

預先感謝您的幫助!這是我第一次發佈的問題...編輯和建設性的批評總是歡迎:)

+1

除了子查詢中的GROUP BY是多餘的(但無害)之外,哪些不適用於您發佈的SQL?我看起來很好。建議從子查詢中刪除TOP表達式,以使外部TOP更易於預測。 –

+0

所以SQL是「工作」,即沒有失敗,所以它在這個意義上是好的,但它沒有返回我期待的結果。當我希望GROUP BY name_of_asset並且每個不同的name_of_asset在結果集中都有一行時,每個name_of_asset都會返回多個(兩個)行。感謝您的其他建議我正在編輯,以反映現在:) – laurenOlga

+0

這些建議與下面的答案結合是我需要的。謝謝@Pieter :) – laurenOlga

回答

2

別組的聯合聲明。像這樣:

SELECT TOP 4 asset, name_of_asset, SUM(usd_today)/1000 usd_today,SUM(usd_prev)/1000 usd_prev 
FROM 
(
    SELECT 'Asset' asset, name_of_asset, usd usd_today, 0 usd_prev 
    FROM my_db..my_table 
    WHERE the_date = '9/30/2014' 
    AND asset = 'A' 

UNION ALL 

    SELECT 'Asset' asset, name_of_asset, 0 usd_today, usd usd_prev 
    FROM my_db..my_table 
    WHERE the_date = '8/29/2014' 
    AND asset = 'A' 
) x 
GROUP BY (x.name_of_asset) 

請注意,因爲您正在使用總和,所以可以將其移出而不會出現問題。 AVG將是一個問題,但您不使用該agragate。

+0

不使用內部的GROUP BY語句和在外部SELECT中使用SUM正是我需要結合擺脫內部TOP 2s。謝謝你的幫助。 – laurenOlga

+0

啊是的......頂尖的2s ......沒有看到。他們應該出去。 – Hogan