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」のいずれかを取得する方法を見つけようとしています。問題は、これが他の多くのクエリで機能する一方で、varchars (MAX 関数を利用できない) の代わりに ntext データ型を使用する特定のテーブルが 1 つあることです。基本的に、ここでは MAX は機能しません。MS SQL Server 2005 で使用できる代替手段はありますか?

prodtree_element_name_l 列をグループ化する必要がありますが、resource_value 列から 1 つの値のみが必要であり、それらのほとんどが同じであるため、それが何であるかは気にしません (ただし、そうでないものもあるため、その値もグループ化できません)。 )。

アップデート:

おっと、私は間違っていました。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.

私が何かを見逃していない限り?

編集:TOPをチェックしてください。

于 2008-10-16T18:13:38.117 に答える