具有总和和唯一输出的SQL查询

具有总和和唯一输出的SQL查询,sql,sql-server,sum,unique,Sql,Sql Server,Sum,Unique,让我将表中的查询建立在以下位置: 此表略经编辑: medley_id | class | color | fruit | rating ======================================================== 1 sweet red apple 25 2 sour blue pear 5 3

让我将表中的查询建立在以下位置:

此表略经编辑:

medley_id   | class    |  color   |   fruit   |   rating
========================================================
1             sweet       red         apple       25
2             sour        blue        pear        5
3             sweet       green       apple       12
4             sour        red         apple       10
5             sour        purple      kiwi        5
6             sweet       purple      kiwi        50
7             sour        blue        kiwi        3
8             sour        blue        pear        9
我需要一个生成以下结果的查询:

class       |   color   |   fruit   |   sum
============================================
(multiple)      red         apple       35
sour            blue        pear        14
sour            blue        kiwi        3
sweet           green       apple       12
(multiple)      purple      kiwi        55
(倍数)不必告诉我倍数是多少,它只需要知道它是倍数,但它并不是让行在总和方面唯一的东西


这有意义吗?有人能帮忙吗?谢谢

我认为这可能会做到:

SELECT
  CASE
    WHEN COUNT(DISTINCT class) > 1 THEN '(multiple)'
    ELSE MAX(class)
  END AS class
, color
, fruit
, SUM(rating) AS sum
FROM MyTable
GROUP BY color,fruit

未经测试,但应该可以将此想法形成一个有效的解决方案。

无需使用
分组方式,仅使用窗口函数:

SELECT DISTINCT
[class] = CASE WHEN 
             DENSE_RANK() OVER (PARTITION BY color, fruit ORDER BY class) 
            +DENSE_RANK() OVER (PARTITION BY color, fruit ORDER BY class DESC) - 1 > 1
              THEN '(multiple)'
              ELSE class
           END
  ,color
  ,fruit
  ,[sum]=  SUM(rating) OVER (PARTITION BY color, fruit)   
FROM #medleys

输出:

╔════════════╦════════╦═══════╦═════╗
║   class    ║ color  ║ fruit ║ sum ║
╠════════════╬════════╬═══════╬═════╣
║ (multiple) ║ purple ║ kiwi  ║  55 ║
║ (multiple) ║ red    ║ apple ║  35 ║
║ sour       ║ blue   ║ kiwi  ║   3 ║
║ sour       ║ blue   ║ pear  ║  14 ║
║ sweet      ║ green  ║ apple ║  12 ║
╚════════════╩════════╩═══════╩═════╝

嗨,小伙子,谢谢你的解决方案!它也可以工作(我碰巧使用的是oracle sql)。您认为您的解决方案比前面的解决方案更有效吗?@AlexBudovski Hi,我使用在线格式化程序@MicroBlue比较两个查询之间的执行计划