2013-01-11 40 views
2
SELECT ORIGIN_NAME, SUM(NET_WEIGHT), 
CASE WHEN ORIGIN_NAME IS NULL THEN 'Basket' ELSE ORIGIN_NAME END AS ORIGIN 
FROM VW_PURCHASE_ORDER 
GROUP BY ORIGIN_NAME 

我有上述查詢,我​​在餅圖中使用。使用Distinct作爲參數

但是,由於這個查詢從抓住信息有重複的記錄,我需要採取上述查詢:(雖然我敢肯定的是,哪裏是錯誤的,因爲它缺乏適當的表達來完成條款)

WHERE DISTINCT PO_PREFIX||PO_NUMBER||PO_SUFFIX 

所以我不重複計算的重複記錄

我試過子查詢的權重,但我目前在SQL編程一個相當大的新手,我不認爲我做它們是否正確(可以將SELECT DISTINCT列用作子查詢?)。

回答

5

讓我們打破了操作步驟爲,

步驟1.找到所有不同行:

SELECT DISTINCT 
    PO_PREFIX, PO_NUMBER, PO_SUFFIX, NET_WEIGHT, 
    COALESCE(ORIGIN_NAME, 'Basket') AS ORIGIN 
FROM 
    VW_PURCHASE_ORDER ; 

第2步:組通過origin,使用上述作爲派生表(名爲tmp):

SELECT 
    ORIGIN, SUM(NET_WEIGHT) AS SUM_NET_WEIGHT 
FROM 
    (SELECT DISTINCT 
     PO_PREFIX, PO_NUMBER, PO_SUFFIX, NET_WEIGHT, 
     COALESCE(ORIGIN_NAME, 'Basket') AS ORIGIN 
    FROM 
     VW_PURCHASE_ORDER 
    ) tmp 
GROUP BY 
    ORIGIN ; 
+0

好消息是絕對w orked ...壞消息是,它不起作用,當我把它放入餅圖...但這是一個問題,我擔心 – socool111

+0

澄清問題。您是否有可能擁有多個重複的PO_PREFIX,PO_NUMBER,PO_SUFFIX和ORIGIN_NAME行但不同的NET_WEIGHT行?在這種情況下應該做什麼? (上面的查詢將它們全部加入,不同的淨重)。 –

+0

不,如果他們有不同的net_weights那麼問題在於插入數據的人 – socool111

0

我認爲這將有所幫助你

SELECT TOP 1 ORIGIN_NAME, SUM(NET_WEIGHT), 
CASE WHEN ORIGIN_NAME IS NULL THEN 'Basket' ELSE ORIGIN_NAME END AS ORIGIN 
FROM VW_PURCHASE_ORDER 
GROUP BY ORIGIN_NAME 
+0

我得到一個「」FROM關鍵字找不到預期的地方「」(在Top 1之後的位置) – socool111

+0

我不認爲這應該是錯誤的? – brykneval

+0

如果正在使用的DBMS沒有「TOP」關鍵字,則會給出錯誤。 –

0

我想你想的是先選擇所有不同行,然後讓你的組。 所以此查詢可能你需要什麼:

SELECT ORIGIN, SUM(NET_WEIGHT) 
FROM (
SELECT DISTINCT 
* , 
CASE WHEN ORIGIN_NAME IS NULL THEN 'Basket' ELSE ORIGIN_NAME END AS ORIGIN 
FROM VW_PURCHASE_ORDER) AS QUERY 
GROUP BY ORIGIN 
+0

這是行不通的,因爲ORIGIN_NAME不一樣,我引用OP:「我不能在第一個select子句中使用distinct,因爲Origin_name不能不同的「 –

+0

這是類似於我的嘗試(只有我指定了DISTINCT列,如果我清除所有列比我的問題將不會解決[由於複雜的記錄條目]),但我像這樣的代碼,收到一個」 FROM關鍵字找不到預期的地方「 – socool111

+0

編輯:我收回它,我可以DISTINCT Origin_name – socool111