0

我知道还有其他一些类似于我想要完成的主题,但我正在努力解决这个问题。我需要能够使用来自多个表的相当复杂的查询为一列而不是另一列获得不同的 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

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

4

3 回答 3

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
于 2012-04-27T20:54:48.367 回答
0

您可以尝试按第二列分组并在第一列上使用 min() 或 max(),因为您不介意为第一列选择哪个值。尽管我不确定您是否可以嵌套这样的组函数-取决于数据库(您可以使用视图或类似方法)

于 2012-04-27T21:04:56.840 回答
0

尝试将 MAX() 函数分配给第一个 SELECT 项而不是第二个。

于 2012-04-27T20:56:44.923 回答