【发布时间】:2013-05-03 14:25:02
【问题描述】:
我想选择两个绑定到表的值,如果它们不存在,则填充一个空值。但是,我只想要每条记录一行。如果我运行下面的查询,CASE 语句会创建重复的行。
SELECT DISTINCT YT.TITLE, YT.DETAILS,
CASE WHEN XT.ACOLUMN = 'CATEGORY' THEN XT.BCOLUMN END AS CATEGORY,
CASE WHEN XT.ACOLUMN = 'DIVISION' THEN XT.BCOLUMN END AS DIVISION
FROM DB.YTABLE YT
LEFT OUTER JOIN DB.XTABLE XT
ON YT.ID_NUM = XT.ID_NUM
我想要的数据:
TitleExample1、DetailsExample1、Category1、Division1
TitleExample2, DetailsExample2, null, Division2
我得到的数据:
TitleExample1,DetailsExample1,Category1,空
TitleExample1, DetailsExample1, null, Division1
TitleExample1, DetailsExample1, null, null
TitleExample2, DetailsExample2, null, Division2
TitleExample2, DetailsExample2, null, null
我还尝试对同一个表使用多个表身份进行连接:
SELECT DISTINCT YT.TITLE, YT.DETAILS, XT1.BCOLUMN AS CATEGORY1,
XT2.BCOLUMN AS DIVISION
LEFT OUTER JOIN DB.XTABLE XT1
ON YT.ID_NUM = XT.ID_NUM
LEFT OUTER JOIN DB.XTABLE XT2
ON YT.ID_NUM = XT.ID_NUM
WHERE XT1.ACOLUMN = 'CATEGORY' AND
XT2.ACOLUMN = 'DIVISION'
如果同时填充了类别和部门值,则此方法效果很好。但是,如果标题和详细信息记录没有关联的类别或部门,则查询不会选择该记录。
我想要的数据:
TitleExample1、DetailsExample1、Category1、Division1
TitleExample2, DetailsExample2, null, Division2
我得到的数据:
TitleExample1、DetailsExample1、Category1、Division1
【问题讨论】:
-
如果您发布表格的内容,如果您获得 3 行相同的标题,那将很有用,这是因为您至少有 3 行与您的 XTABLE 匹配。而且第一次查询不能得到这个结果:TitleExample1, DetailsExample1, Category1, Division1,因为XT.ACOLUMN不能同时等于CATEGORY和DIVISION