2016-05-11 16 views
0

を取得し、その後lang_typeでレコードを取得する場合は存在しない、私はデフォルトLANG

------------------------- 
| Label_Id | Lang_Type | 
------------------------- 
| Label1 | EN  | 
------------------------- 
| Label2 | EN  | 
------------------------- 
| Label2 | DE  | 
------------------------- 
| Label3 | EN  | 
------------------------- 
| Label4 | EN  | 
------------------------- 
| Label4 | DE  | 
------------------------- 
| Label5 | EN  | 
------------------------- 

と予想される出力を次のような要件は、我々はLang_Type = DE を照会ならば、我々はDE場合Label_Idすなわちごとに1つの行を取得することである持っていますそのラベルのEN行を返します。

------------------------- 
| Label_Id | Lang_Type | 
------------------------- 
| Label1 | EN  | 
------------------------- 
| Label2 | DE  | 
------------------------- 
| Label3 | EN  | 
------------------------- 
| Label4 | DE  | 
------------------------- 
| Label5 | EN  | 
------------------------- 

誰かが、現在のテーブル構造で、この要件を満たすためにか、テーブル構造は、正規化されたか、何か他のものでなければなりませんどのように私を導いてくださいすることができます。

ありがとうございました!

答えて

2
select label_ID,count(label_ID) Label_count into #LabelCount 
from table_name 
group by label_ID 


select O.label_ID,O.Lang_Type into #O2 
from table_name O 
inner join #LabelCount LC on O.label_ID=LC.label_ID 
where LC.Label_count=2 AND O.Lang_Type='DE' 

select O.label_ID,O.Lang_Type into #O3 
from table_name O 
inner join #LabelCount LC on O.label_ID=LC.label_ID 
where LC.Label_count=1 

select * from (
select label_ID,Lang_Type from #O2 
UNION 
select label_ID,Lang_Type from #O3) AS ANSWER 

DROP TABLE #LabelCount 
DROP TABLE #O2 
DROP TABLE #O3 

これは、あなたの返信用

+0

おかげで必要な出力を与えるかもしれません。私はこれが望ましい出力を与えるかもしれないと思うが、これは私たちがたくさんの選択をするので少し遅いかもしれない。テーブル構造やその他のものを変更することで、計算量が少なくなる可能性のある他の方法がありますか? –

+0

コードをpl/sqlに変換して、魅力的に機能します。 –

関連する問題