0

使用以下查询:

    SELECT pe.prodtree_element_name_l, MAX(rs.resource_value) AS resource_value
    FROM prodtree_element pe
    LEFT JOIN resource_shortstrings rs
        ON pe.prodtree_element_name_l_rk = rs.resource_key
    WHERE rs.language_id = '5'
        AND pe.prodtree_element_name_l <> ''
    GROUP BY prodtree_element_name_l

我试图弄清楚如何获取任何“resource_value”。问题是虽然这适用于许多其他查询,但我有一个使用 ntext 数据类型而不是 varchars 的特定表(它不能利用 MAX 函数)。所以基本上,MAX在这里不起作用。我可以在 MS SQL Server 2005 上使用替代品吗?

我需要对 prodtree_element_name_l 列进行分组,但我只需要 resource_value 列中的一个值,而且我不在乎它是什么,因为它们中的大多数都是相同的(尽管有些不是,因此我也不能对那个进行分组)。

更新:

哎呀,我错了,prodtree_element_name_l 也是一个 NTEXT。这可能会有所帮助:p

4

3 回答 3

1

这将获得第一个随机条目

SELECT DISTINCT 
     pe.prodtree_element_name_l, 
    (SELECT TOP 1 rs2.resource_value
    FROM resource_shortstrings rs2
    WHERE rs2.language_id = '5'
      AND rs2.resource_key = pe.prodtree_element_name_l_rk) AS "resource_value"
FROM prodtree_element pe
LEFT JOIN resource_shortstrings rs
    ON pe.prodtree_element_name_l_rk = rs.resource_key
WHERE rs.language_id = '5'
    AND pe.prodtree_element_name_l IS NOT NULL
--GROUP BY prodtree_element_name_l

笔记

在您的查询中,您使用的是 LEFT JOIN,但也使用了左连接表上的过滤器,因此限制了记录集。我把它留在了原地,因为我认为它会改变你的结果......但是做 LEFT JOIN 没有意义。

编辑

根据评论中的反馈,我将 group by 注释掉并切换到不同的

于 2008-10-16T18:20:57.883 回答
0
  SELECT pe.prodtree_element_name_l, MAX(CAST(rs.resource_value AS NVARCHAR(MAX))) AS resource_value
    FROM prodtree_element pe
    LEFT JOIN resource_shortstrings rs
        ON pe.prodtree_element_name_l_rk = rs.resource_key
    WHERE rs.language_id = '5'
        AND pe.prodtree_element_name_l <> ''
    GROUP BY prodtree_element_name_l
于 2008-10-16T18:01:37.907 回答
0

我收到错误:

The data types ntext and varchar are incompatible in the not equal to operator.

除非我错过了什么?

编辑:检查顶部。

于 2008-10-16T18:13:38.117 回答