0

私は以前に一度これをしましたが、方法を覚えていません...私はそれで十分に苦労しており、現在助けを求めています.

Uuid と ProcessId の 2 つの列を持つテーブルがあります。ProcessId 列には現在、ValueA と ValueB の 2 つの値があります。

次の表のように、自己結合(完全外部結合?)を行いたい:

        1234バリューA
        1234バリューB
        2345バリューB
        3456バリューA

次のような結果が得られます。

        Uuid ValueA ValueB
        1234 了解 了解
        2345 ミッシング OK
        3456 OK 行方不明
4

2 に答える 2

1

これを試して:

SELECT Uuid, 
   CASE WHEN U.ValueA>0 THEN 'OK' ELSE 'Missing' END AS ValueA,
   CASE WHEN U.ValueB>0 THEN 'OK' ELSE 'Missing' END AS ValueB
FROM 
 (SELECT T.Uuid, 
     (SELECT COUNT(*) FROM MyTable AS M WHERE T.Uuid=M.UserID AND ValueField='ValueA') AS ValueA, 
     (SELECT COUNT(*) FROM MyTable AS M WHERE T.Uuid=M.UserID AND ValueField='ValueB') AS ValueB
  FROM (SELECT DISTINCT Uuid FROM MyTable) AS T
  GROUP BY Uuid) AS U
ORDER BY Uuid
于 2012-07-02T22:32:59.793 に答える
0

インデックス、テーブルサイズ、およびオプティマイザによっては、自己結合のペアを使用するのが最も速い場合があります。

select TableU.Uuid, 
    if(count(TableA.ProcessId) > 0, 'OK', 'Missing') as ValueA, 
    if(count(TableB.ProcessId) > 0, 'OK', 'Missing') as ValueB 
from Table11301861 as TableU
left join Table11301861 as TableA on TableA.ProcessId = 'ValueA' and TableA.Uuid = TableU.Uuid
left join Table11301861 as TableB on TableB.ProcessId = 'ValueB' and TableB.Uuid = TableU.Uuid
group by TableU.Uuid
于 2012-07-03T15:25:15.620 に答える