0

次の単純化された 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

この例では、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 が 1 つしか見つからないため、グループ化は行われないことに注意してください。

基準に基づいてグループ化を制限する方法、またはそれが可能かどうかさえわかりません。ここにいる SQL の天才の 1 人が助けてくれることを願っています。追加情報が必要な場合はお知らせください。ありがとう。

4

3 に答える 3

3

あなたは書ける:

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
;

(NBMIN(id)MIN(desc)は、同じ基になるレコードに由来しない場合があります。それが問題である場合は、上記を少し調整する必要があります。)

于 2012-11-02T15:38:59.887 に答える
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 6doc 3が同じケースにあると仮定します。sqlFiddleで検証済み。

于 2012-11-02T15:39:12.240 に答える
0

試す:

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)
于 2012-11-02T15:37:42.930 に答える