我知道还有一些类似于我想要完成的其他主题,但我正在努力解决这个问题。我需要能够为一个列获取不同的SQL查询结果,而不是使用来自多个表的相当复杂的查询来获取另一个列。
这是当前的查询:
select llattrdata.ID dataid,
max(case when llattrdata.ATTRID = 2 then llattrdata.VALSTR end) TED_ID
from llattrdata, dtree
where
llattrdata.DEFID = 19400074 and
llattrdata.VERNUM = dtree.VERSIONNUM and
llattrdata.ID = dtree.DATAID
group by llattrdata.ID
目前的结果:
DATAID TED_ID
19400078 10083
19400943 10083
19400941 10335
期望的结果:
DATAID TED_ID
19400078 10083
19400941 10335
有人可以帮帮我吗?我知道它可能涉及某种联接,但我不完全确定如何在这种情况下继续。
答案 0 :(得分:2)
SELECT MIN(dataid) dataid, TED_ID
FROM
(
SELECT
llattrdata.ID dataid,
MAX(CASE WHEN llattrdata.ATTRID = 2 THEN llattrdata.VALSTR END) TED_ID
FROM llattrdata
JOIN dtree ON llattrdata.ID = dtree.DATAID
WHERE llattrdata.DEFID = 19400074
AND llattrdata.VERNUM = dtree.VERSIONNUM
GROUP BY llattrdata.ID
) T1
GROUP BY TED_ID
答案 1 :(得分:0)
尝试将MAX()函数分配给第一个SELECT项而不是第二个SELECT项。
答案 2 :(得分:0)
您可以尝试按第二列进行分组,并在第一列上使用min()或max(),因为您不介意为第一列选择哪个值。虽然我不确定你是否可以嵌套这样的组函数 - 取决于db(你可以使用视图或类似的)