2016-11-10 10 views
0

私が数日間作業してきたこの簡単なクエリを手伝ってください。私はSQLに慣れていないし、同様の質問に対する回答を読んだが、私が探していたものは見つけられなかった。SQL JOIN and CASE

私の目標は、2つの異なるテーブルから情報をクエリし、それを読みやすい方法で表示することです。私は、私は必要なすべての情報を表示する次のクエリを作成することに成功した:

SELECT 
    PA.EntityName, 
    PA.EntityType, 
    PO.Name, 
    PO.Feature 
FROM PolicyAssociations PA 
JOIN Policies PO ON PO.Id = PA.PolicyId 
WHERE 
    PA.EntityType='1' 
    or 
    PA.EntityType='2' 
GROUP by PO.Name, PA.EntityName 

は今、私はテキストに数値から(「オブジェクト・タイプ」として表示されます)EntityType列の出力を変更する必要があり、例えば'1'の代わりに 'Computer'と '2'の代わりに 'User'を表示します。

次のクエリは、独立して動作しますが、私は多くのバリエーションで、クエリのJOINの主にこれらの文字列を組み込むことができなかった:

SELECT EntityType, 
CASE 
    WHEN EntityType = '1' THEN 'Computer' 
    WHEN EntityType = '2' THEN 'User' 
END 
FROM policyassociations 
+0

[失敗した]試行を共有して、問題の正確な内容を説明してください。 – Mureinik

+1

なぜGROUP BYが必要ですか?凝集が起こっていない。代わりに 'ORDER BY 'にしたいですか? – xQbert

+0

これはどのRDBMSですか? 'mysql'、' postgresql'、 'sql-server'、' oracle'、 'db2'のどれかを指定するタグを追加してください。 –

答えて

0

を意味しますか?あまりにも基本的な解決策と思われる。

SELECT 
    PA.EntityName, 
    CASE WHEN EntityType = '1' THEN 'Computer' 
     WHEN EntityType = '2' THEN 'User'END as EntityTypeStr, 
    PA.EntityType, 
    PO.Name, 
    PO.Feature 
FROM PolicyAssociations PA 
JOIN Policies PO ON PO.Id = PA.PolicyId 
WHERE 
    PA.EntityType='1' 
    or 
    PA.EntityType='2' 
+0

申し訳ありませんが私は姿を消して、これを落として、優先順位を変更しなければなりませんでしたが、私は今それに戻ります。 まずは、ありがとう@Liss!それがそれを解決しました。 私は今このようなフィールドを持つ別の列で同じことをしようとしています: – Erez

+0

これは完全に使用しているデータベースの種類に依存します。あなたはそのタイプの正規表現を調べることができます。 – Liss

0

これが何をすべき:あなたはちょうどこれを

SELECT 
    PA.EntityName, 
    PA.EntityType, 
    PO.Name, 
    PO.Feature, 
    CASE WHEN PA.EntityType = '1' THEN 'Computer' ELSE 'User' END [Object Type] 
FROM PolicyAssociations PA 
INNER JOIN Policies PO 
    ON PO.Id = PA.PolicyId 
WHERE 
    PA.EntityType IN ('1','2') -- Why are these values not INTs? 
ORDER by PO.Name, PA.EntityName;