2013-01-11 43 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