只需要对查询中的特定行进行分组 请考虑以下简化的MySQL表: id | docID | docTypeID | makeID | desc 1 | 1 | 1 | 1 | doc 1 2 | 1 | 1 | 2 | doc 2 3 | 2 | 2 | 1 | doc 3 4 | 3 | 3 | 2 | doc 4 5 | 1 | 1 | 4 | doc 5 6 | 2 | 2 | 5 | doc 6 7 | 4 | 1 | 1 | doc 7

只需要对查询中的特定行进行分组 请考虑以下简化的MySQL表: id | docID | docTypeID | makeID | desc 1 | 1 | 1 | 1 | doc 1 2 | 1 | 1 | 2 | doc 2 3 | 2 | 2 | 1 | doc 3 4 | 3 | 3 | 2 | doc 4 5 | 1 | 1 | 4 | doc 5 6 | 2 | 2 | 5 | doc 6 7 | 4 | 1 | 1 | doc 7,mysql,sql,Mysql,Sql,在本例中,docID、docTypeID和makeID都是外键 当docTypeID为1的文档与多个make关联时,我需要将这些文档分组,并返回一个特殊的make描述(“找到多个make”) 对于这个示例表,我需要返回的是: id | docID | docTypeID | makeID | desc 1 | 1 | 1 | multiple makes found | doc 1 3 | 2 | 2

在本例中,docID、docTypeID和makeID都是外键

当docTypeID为1的文档与多个make关联时,我需要将这些文档分组,并返回一个特殊的make描述(“找到多个make”)

对于这个示例表,我需要返回的是:

id  | docID  | docTypeID | makeID                | desc
1   | 1      | 1         | multiple makes found  | doc 1
3   | 2      | 2         | 1                     | doc 3
4   | 3      | 3         | 2                     | doc 4
6   | 2      | 2         | 5                     | doc 6
7   | 4      | 1         | 1                     | doc 7
注意,在id 7的情况下,只找到一个make,因此没有执行分组

我不确定如何根据标准限制分组,或者这是否可能。我希望这里的一位SQL天才能够提供帮助。如果需要其他信息,请告诉我。谢谢。

试试:

Select id, DocId, DocTypeId, 
  Case MakeCount When 1 Then MakeId 
      Else 'multiple makes found' End MakeId, 
  Desc
From  (Select Min(id) Id, DocId, DocTypeId, 
            Count(Distinct MakeId) MakeCount, 
            Min(MakeId) MakeId, Min(desc) Desc
       From TableName
       Group By DocId, DocTypeId)
尝试:

你可以写:

SELECT MIN(id) AS id,
       docID,
       docTypeID,
       CASE WHEN COUNT(1) > 1
            THEN 'multiple makes found'
            ELSE MIN(makeID)
        END AS makeID,
       MIN(desc) AS desc
  FROM simplified_mysql_table
 GROUP
    BY docID,
       docTypeID
       CASE WHEN docTypeID = 1
            THEN 0
            ELSE id
        END
;
(注意,
MIN(id)
MIN(desc)
可能不是来自同一个底层记录。如果这是一个问题,那么您需要稍微调整上面的内容。)

您可以编写:

SELECT MIN(id) AS id,
       docID,
       docTypeID,
       CASE WHEN COUNT(1) > 1
            THEN 'multiple makes found'
            ELSE MIN(makeID)
        END AS makeID,
       MIN(desc) AS desc
  FROM simplified_mysql_table
 GROUP
    BY docID,
       docTypeID
       CASE WHEN docTypeID = 1
            THEN 0
            ELSE id
        END
;

(注意,
MIN(id)
MIN(desc)
可能不是来自同一个底层记录。如果这是一个问题,那么您需要稍微调整上面的内容。)

一个简单的分组方式,如:

select min(id),docID,docTypeID,
  case when count(1) > 1 then 'multiple makes found' else min(makeID) end AS makeID, 
  min(`desc`) 
 from docs_table group by docID,docTypeID;
我应该这样做。假设
doc 6
doc 3
处于相同的情况。
通过。

一个简单的分组验证,如:

select min(id),docID,docTypeID,
  case when count(1) > 1 then 'multiple makes found' else min(makeID) end AS makeID, 
  min(`desc`) 
 from docs_table group by docID,docTypeID;
我应该这样做。假设
doc 6
doc 3
处于相同的情况。
通过验证。

向我们展示您决定如何返回
id=1
而不是
2
5
?仅针对doctype=1?id 3和id 6具有相同的doctype但不同的makeid。为什么在这种情况下两者都要?@eggyal:分组时应该返回min(id)。@nawful:doctype 1是唯一应该分组的时间。由于3和6是doctype 2,因此它们被排除在分组之外。请告诉我们您是如何决定返回
id=1
而不是
2
5
?仅针对doctype=1?id 3和id 6具有相同的doctype但不同的makeid。为什么在这种情况下两者都要?@eggyal:分组时应该返回min(id)。@nawful:doctype 1是唯一应该分组的时间。由于3和6是doctype 2,它们被排除在分组之外。
Min(id)
Min(MakeId)
Min(desc)
都可能与不同的记录相关。
Min(id)
Min(MakeId)
Min(desc)
都可能与不同的记录相关。@eggyal谢谢,我知道这一点,但在他的情况下,我不确定这是否重要,请看我的更新答案。好的,在这种情况下,
min(id)
min(desc)
可能与不同的记录有关(这可能重要,也可能不重要:不清楚OP的要求是什么)。@eggyal谢谢,我知道这一点,但在他的情况下,我不确定这是否重要,无论如何,请看我的更新答案。好的,在这种情况下,
min(id)
min(desc)
可能与不同的记录有关(这可能重要,也可能不重要:OP的要求不清楚)。