1

关注数据集

  ID  | Description |   Type
-------------------------------
12204 |     ABC     | Special
12204 |     DEF     | Connector
12541 |     GHI     | Special
12541 |     JKL     | Special
12541 |     MNO     | Hybrid
13292 |     PQR     | Resistor
13292 |     STU     | Connector
13292 |     VWX     | Hybrid
14011 |     YZa     | Special
14012 |     bcd     | Resistor

我想要的是以下内容:

  ID  | Description |   Type
-------------------------------
12204 |     DEF     | Connector
12541 |     MNO     | Hybrid
13292 |     PQR     | Resistor or Connector or Hybrid <-- doesn't matter
14011 |     YZa     | Special
14012 |     bcd     | Resistor

所以,我需要的只是根据类型的整个数据集。如果可能只有“特殊”类型,那么我需要使用它,但如果没有,那么我想使用其他类型。

我想对所有内容进行分组,但随后它使用了第一行,其中主要包含 Special ...

到目前为止我的查询:

SELECT ID, Description, Type FROM anyDatabase GROUP BY ID HAVING count(Type) > 1 

希望任何人都可以提供帮助:) Adi

4

2 回答 2

3

你可以这样试试

SELECT
  l.id,
  l.description,
  IF(r.type IS NULL, l.type, r.type) AS `Type`
FROM newtable as l
  LEFT JOIN (SELECT *
         FROM newtable
         WHERE type <> 'Special') as r
    on r.id = l.id
GROUP BY l.id

SQL 小提琴演示

于 2013-04-18T08:08:47.603 回答
1

这可能是一个解决方案:

SELECT 
    newtable.id, 
    newtable.description, 
    newtable.type
FROM newtable 
INNER JOIN(
           SELECT
              id, 
              MAX(CASE WHEN Type!='Special' THEN Type END) type
           FROM newtable
           GROUP BY id
      ) mx
  ON newtable.id=mx.id
     AND newtable.type=COALESCE(mx.type, 'Special')

在这里提琴(感谢 raheel shan 的提琴!)

于 2013-04-18T08:19:48.290 回答