SQL查询产量区别于一列

时间:2012-04-27 20:50:55

标签: sql

我知道还有一些类似于我想要完成的其他主题,但我正在努力解决这个问题。我需要能够为一个列获取不同的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

有人可以帮帮我吗?我知道它可能涉及某种联接,但我不完全确定如何在这种情况下继续。

3 个答案:

答案 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(你可以使用视图或类似的)