Sql 使用Distinct作为参数

Sql 使用Distinct作为参数,sql,distinct,Sql,Distinct,我有上面的查询,我在饼图中使用它 但是,由于此查询从中获取的信息具有重复的记录,因此我需要执行上面的查询:尽管我确信WHERE是错误的,因为它缺少适当的表达式来完成子句 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 因此,我不会重复

我有上面的查询,我在饼图中使用它

但是,由于此查询从中获取的信息具有重复的记录,因此我需要执行上面的查询:尽管我确信WHERE是错误的,因为它缺少适当的表达式来完成子句

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
因此,我不会重复计算重复记录中的重量


我已经尝试过子查询,但我目前是SQL编程的一个相当大的新手,我认为我没有正确地进行子查询,可以将SELECT DISTINCT列用作子查询吗?

我认为这会对您有所帮助

WHERE DISTINCT PO_PREFIX||PO_NUMBER||PO_SUFFIX

我认为您需要的是首先选择所有不同的行,然后按分组。 因此,此查询可能会满足您的需要:

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

让我们将操作分解为步骤

第一步。查找所有不同的行:

步骤2:按原点分组,使用上面的作为名为tmp的派生表:


我得到一个FROM关键字not found,就在Top 1之后,如果正在使用的DBMS没有Top关键字,它将给出错误。在t-sql中没有问题,那么什么是RDBMST这不起作用,因为源名称不同,我在第一个select子句中引用OP:i can't use distinct,因为Origin\u name无法区分,这与我尝试的类似,只是我指定了DISTINCT列,如果我区分了所有列,那么我的问题将不会得到解决[由于复杂的记录条目],但我像这段代码一样,收到了一个FROM关键字not found where expectedEDIT:我收回它,我可以区分Origin\u name我看到了!因此,您应该在MYSQL服务器中使用RANK函数,只保留每个订单ID的PO_前缀| | | PO_编号| | PO_后缀的第一个元组,以及group by。请尝试此选择来源,从SELECT*选择SUMNET\U权重,如果来源名称为空,则“篮子”其他来源名称结束为来源排名,按订单ID、订单前缀、订单编号、订单后缀按ID排序来源名称作为VW\U采购订单排名作为查询,其中排名=1组由来源选择来源,从SELECT*选择SUMNET\U权重,如果ORIGIN_NAME为空,则“Basket”否则ORIGIN_NAME结束为ORIGIN RANK,按订单ID、PO_前缀、PO_编号、PO_后缀按ORIGIN_NAME划分,按VW_PURCHASE_ORDER中的ORIGIN_NAME作为RANK进行查询,其中RANK=1 GROUP BY Origgingood news绝对有效……坏消息是,当我把它放在饼图上时,它不起作用……但这是一个让我担心分类问题的问题。您是否有可能有多行具有重复的采购订单前缀、采购订单编号、采购订单后缀和原产地名称,但净重不同?在这种情况下应该怎么做?上面的查询将它们全部相加,即不同的净重。不,如果它们有不同的净重,那么问题在于插入数据的人……好吧,我已经让它工作了,但饼图的数字与查询中检索到的数字不匹配:
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
SELECT DISTINCT 
   PO_PREFIX, PO_NUMBER, PO_SUFFIX, NET_WEIGHT,
   COALESCE(ORIGIN_NAME, 'Basket') AS ORIGIN
FROM 
   VW_PURCHASE_ORDER ;
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 ;