【发布时间】:2015-06-10 10:32:23
【问题描述】:
我正在尝试为 CELLNAME 和 LANGUAGE 的每个组合获取一行,但我无法获取零计数的行。例如,如果 CELLNAME 'x' 不包含任何具有语言代码 DE 的 CLIENT_ID 或 CLNOCL,则我不会得到计数为零的行。当有一种或多种语言时,这非常有效。使用的数据库是 Oracle。 我坚持了一段时间,因为我不太擅长 SQL,如果有人能提供帮助,我将不胜感激。这是查询:
select QA_ID,MODULE_ID,ATTRIBUTE_ID,ATTRIBUTE_NAME,CELLNAME,CNT
FROM
(SELECT QA_ID,CELLNAME,LANGUE, COUNT(*) CNT
FROM (
select QA_ID,CELLNAME,
CASE
WHEN CLOLAN = 'EN' THEN 'ENGLISH'
WHEN CLOLAN = 'DE' THEN 'GERMAN'
ELSE 'UNKNOWN'
END as LANGUE
from TB_PROP_Q A
INNER JOIN VWFC_WKCLIE B
ON A.CLIENT_ID = B.CLNOCL
)
GROUP BY QA_ID,CELLNAME, LANGUE
)C
INNER JOIN
(
SELECT A.MODULE_ID,A.MODULE_NAME,B.ATTRIBUTE_NAME,B.ATTRIBUTE_ID
FROM QA_TABLE_MODULE A
INNER JOIN QA_TABLE_ATTRIBUTE B
ON A.MODULE_ID=B.MODULE_ID
WHERE MODULE_NAME = 'LANGUE'
)D
ON C.LANGUE = D.ATTRIBUTE_NAME
【问题讨论】:
-
您需要使用
LEFT JOIN来获取零匹配行的计数。在这种情况下,COUNT(*)也不起作用 - 这将返回 1,因为在左外连接中将返回一个空行。