1

myview次の方法で情報を取得するビューがあります。

ID  | ATTRNAME | ATTRVAL
1   | attr1    | a
2   | attr2    | b
3   | attr3    | c
4   | attr3    | d
..  | ..       | ..
..  | ..       | ..

次のような出力が必要です。

ATTRNAME | ATTRVAL
attr1    | a
attr2    | b
attr3    | Multiple Values

ここで、属性 (ATTRNAME) に単一の値がある場合はそれが表示され、属性 (attr3 など) に複数の値がある場合は、「複数の値」というテキストが表示されます。

私が試してみました:

SELECT DISTINCT attrname
       , CASE cnt
            WHEN 1 THEN TO_CHAR(attrval)
            ELSE 'Multiple Values'
         END AS attrval_rev
FROM   myview
JOIN   (SELECT   attrname, COUNT(attrval) AS cnt
        FROM     myview
        GROUP BY attrname) USING (attrname)

これは機能しますが、約 11,000 行の実行に 8 分以上かかるため、これは適切な種類のソリューションではありません。助けてください!

4

3 に答える 3

3

もっと簡単な方法があります:

SELECT ATTRNAME,
       CASE WHEN COUNT(*) = 1 THEN MIN(attrval) ELSE 'Multiple Values' END
 FROM myview
GROUP BY ATTRNAME

まだパフォーマンスの問題がある場合はお知らせください。

于 2013-04-26T14:24:30.020 に答える
0

SELECT attrname, WHEN count(*) > 1 THEN 'Multiple Values' ELSE TO_CHAR(attrval) END FROM myview GROUP BY attrname

于 2013-04-26T14:21:18.620 に答える