SQL JOIN和CASE

时间:2016-11-10 18:52:43

标签: sql

我希望你能帮我解决这个我已经工作了几天的简单查询。我是SQL的新手,已经阅读了类似问题的答案,但没有找到我想要的东西。

我的目标是从两个不同的表中查询信息,并以可读的方式显示它。我成功创建了以下查询,该查询显示了我需要的所有信息:

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”和“用户”而不是“2”。

以下查询独立工作,但我未能将这些字符串合并到主要的JOIN查询中:

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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'