Sql 返回一个值,该值指示列具有多个值

Sql 返回一个值,该值指示列具有多个值,sql,sqlite,Sql,Sqlite,如何编写SQL查询来计算具有相同值的列,并返回指示该列具有多个值的值。见下面的例子 我的尝试: SELECT ID, 'X' AS TYPE FROM SAMPLE_TABLE WHERE TYPE = 'C' GROUP BY ID HAVING COUNT(*) > 1 UNION SELECT * FROM SAMPLE_TABLE GROUP BY ID HAVING COUNT(*) = 1; +-----------

如何编写SQL查询来计算具有相同值的列,并返回指示该列具有多个值的值。见下面的例子

我的尝试:

SELECT ID, 'X' AS TYPE 
    FROM SAMPLE_TABLE 
    WHERE TYPE = 'C'
    GROUP BY ID HAVING COUNT(*) > 1 
    UNION 
    SELECT * FROM SAMPLE_TABLE  
    GROUP BY ID HAVING COUNT(*) = 1;
+-----------+
| ID | TYPE |
+-----------+
|101 |  C   |
|103 |  A   |
+-----------+
+-----------+
| ID | TYPE |
+-----------+
|101 |  C   |
|104 |  X   |
|105 |  X   |
+-----------+
样本

+-----------+
| ID | TYPE |
+-----------+
|101 |  C   |
|102 |  A   |
|102 |  B   |
|103 |  A   |
|104 |  B   |
|104 |  C   |
|105 |  A   |
|105 |  C   |
+-----------+
我的结果:

SELECT ID, 'X' AS TYPE 
    FROM SAMPLE_TABLE 
    WHERE TYPE = 'C'
    GROUP BY ID HAVING COUNT(*) > 1 
    UNION 
    SELECT * FROM SAMPLE_TABLE  
    GROUP BY ID HAVING COUNT(*) = 1;
+-----------+
| ID | TYPE |
+-----------+
|101 |  C   |
|103 |  A   |
+-----------+
+-----------+
| ID | TYPE |
+-----------+
|101 |  C   |
|104 |  X   |
|105 |  X   |
+-----------+
期望值:

SELECT ID, 'X' AS TYPE 
    FROM SAMPLE_TABLE 
    WHERE TYPE = 'C'
    GROUP BY ID HAVING COUNT(*) > 1 
    UNION 
    SELECT * FROM SAMPLE_TABLE  
    GROUP BY ID HAVING COUNT(*) = 1;
+-----------+
| ID | TYPE |
+-----------+
|101 |  C   |
|103 |  A   |
+-----------+
+-----------+
| ID | TYPE |
+-----------+
|101 |  C   |
|104 |  X   |
|105 |  X   |
+-----------+

您可以使用聚合和
案例

select id,
       (case when min(type) = max(type) then min(type) else 'X' end) as type
from t
group by id;

您可以使用条件聚合:

select id,
       case when sum(type <> 'C') then 'X' else 'C' end type
from tablename
group by id
having sum(type = 'C') > 0

结果中的第102行和第103行发生了什么?查询没有返回102行和第103行的结果,返回了“A”,我想返回包含“C”的ID,如果ID包含“C”和其他类型,则返回为“X”,其中“X”表示此ID包含“C”和其他类型。@PLOW。如果
id
的所有行上的类型都相同,则返回类型。否则,它将返回
'X'
。这就是我对这个问题的解释。如果我们想按“B”或“C”搜索,那么我们可以得到101:C、102:X、104:X和105:X检查这个: