0

以下のような2つのテーブルがあります。基本的には両方に参加したいので、以下のような結果を期待しています。

テーブル 2 の最初の 3 行にはアクティビティ ID がなく、空です。

すべてのフィールドはタブで区切られています。カテゴリ「33」には、表 2 に従って 3 つの説明があります。

「33」カテゴリには 3 つの値があるため、「アクティビティ ID」を使用して結果を取得する必要があります。

誰かがこの出力を達成する方法を教えてもらえますか?

表1

Empid カテゴリ アクティビティ ID

44126 33トレイン

44127 10 UFL

44128 12 東井

44129 33 未割り当て

44130 15 マイクロソフト

44131 33 メリット

44132 43 メリット

表 2:

カテゴリ アクティビティ ID カテゴリの説明

10請求可能

12請求可能

15 請求不可

33 電車のトレーニング

33 割り当てられていないベンチ

33 特典 特典

43 メリット

期待される出力:

44126 33 トレーニング

44127 10 請求可能

44128 12 請求可能

44129 33 ベンチ

44130 15 請求不可

44131 33 メリット

44132 43 メリット

4

2 に答える 2

1

I'm not sure if I understand your question or your data, but would this work?

select table1.empid, table1.category, table2.categdesc
from table1 join table2
on table1.activityID = table2.activityID;
于 2013-03-29T23:23:38.403 に答える
1

多くの制限があるため、このハイブを実行するのは少し難しくなります。これは私がそれを解決した方法ですが、もっと良い方法があるかもしれません。

以下のようにテーブルに名前を付けました。Table1 = EmpActivity Table2 = ActivityMas

問題は、Table2 の null フィールドが原因です。ビューを作成し、UNION を使用して 2 つの異なるクエリの結果を結合しました。

Create view actView AS Select * from ActivityMas Where Activityid ='';

SELECT * From (
Select EmpActivity.EmpId, EmpActivity.Category, ActivityMas.categdesc
from EmpActivity JOIN ActivityMas 
ON  EmpActivity.Category =  ActivityMas.Category 
AND EmpActivity.ActivityId = ActivityMas.ActivityId
UNION ALL
Select EmpActivity.EmpId, EmpActivity.Category, ActView.categdesc from EmpActivity
JOIN ActView ON  EmpActivity.Category =  ActView.Category
)

UNION ALL はトップレベルのステートメントから直接サポートされていないため、トップレベルの SELECT 句を使用する必要があります。これにより、合計 3 つの MR ジョブが実行されます。そして、以下は私が得た結果です。

44127   10      billable
44128   12      billable
44130   15      Non-billable
44132   43      Benefits
44131   33      Benefits
44126   33      Training
44129   33      Bench
于 2013-03-31T10:14:31.450 に答える