【发布时间】:2017-06-27 01:51:31
【问题描述】:
我有一个结构类似于下面的表:
|C1|C2|C3|
|K1|V1|??|
|K1|V2|??|
|K1|V3|??|
|K2|V2|??|
我需要编写一个查询来检查键(比如 K1)是否映射到任何行(比如 V2)中的特定值。如果是,则 C3 列中的值被视为 1,否则为 0。
如果有任何帮助,我将不胜感激。
【问题讨论】:
我有一个结构类似于下面的表:
|C1|C2|C3|
|K1|V1|??|
|K1|V2|??|
|K1|V3|??|
|K2|V2|??|
我需要编写一个查询来检查键(比如 K1)是否映射到任何行(比如 V2)中的特定值。如果是,则 C3 列中的值被视为 1,否则为 0。
如果有任何帮助,我将不胜感激。
【问题讨论】:
以下查询应该会给出您想要的结果。子查询标识至少一次映射到C2 中某个值的所有C1 值。如果是,那么我们将C3 值渲染为 1,否则我们显示 0。
SELECT
t1.C1,
t1.C2,
CASE WHEN t2.C1 IS NOT NULL THEN 1 ELSE 0 END AS C3
FROM yourTable t1
LEFT JOIN
(
SELECT C1
FROM yourTable
GROUP BY C1
HAVING SUM(CASE WHEN C2 = 'V1' THEN 1 ELSE 0 END) > 0
) t2
ON t1.C1 = t2.C1
【讨论】: