Sql 返回一个值,该值指示列具有多个值
如何编写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; +-----------
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检查这个: