Sql查询结合2种不同。列输出基于条件

时间:2014-10-17 16:10:04

标签: mysql sql

我想根据条件在新列中合并2列。请检查以下查询。我尝试了什么。

SELECT
  `ContactPers`.`contact_persID`,
  `ContactPers`.`persID`,
  `ContactPers`.`contactID`
FROM `bdrplus`.`contact_pers` AS `ContactPers`
WHERE ((`ContactPers`.`persID` = 55) OR (`ContactPers`.`contactID` = 55))
 AND `ContactPers`.`etat` = 1

输出:

contact_persID  persID  contactID
18              90      55
19              55      56
20              55      61
23              55      67

所需的输出类似于(在newColumn中不需要55,因为它在WHERE子句中,参见上面的查询。想要根据条件组合persID和contactID。)

contact_persID  persID  contactID newColumn
18              90      55        90
19              55      56        56
20              55      61        61
23              55      67        67

-Thanks

3 个答案:

答案 0 :(得分:1)

我不确定MySql方面的内容。以下是我将如何在SQL中执行此操作:

SELECT
    `ContactPers`.`contact_persID`,
    `ContactPers`.`persID`,
    `ContactPers`.`contactID`,
    CASE `ContactPers`.`persID`
        WHEN 55 THEN `ContactPers`.`contactID`
        ELSE `ContactPers`.`persID`
    END AS newColumn
FROM `bdrplus`.`contact_pers` AS `ContactPers`
WHERE 55 IN (`ContactPers`.`persID`, `ContactPers`.`contactID`)
AND `ContactPers`.`etat` = 1

答案 1 :(得分:0)

CASE语句可让您逐行进行决策。还有一个IF语句几乎相同,但我建议CASE,因为它有更广泛的支持(例如Oracle,SQL Server,Teradata等):

SELECT
  contact_persID,
  persID,
  contactID,
  CASE WHEN contactID = 55 THEN persID ELSE contactID END AS newColumn
FROM dbrplus.contact_pers
WHERE (PersID = 55 OR contactID = 55)
  AND etat = 1

答案 2 :(得分:0)

单表查询的列名中不需要FQN。

SELECT
     contact_persID,
     persID,
     contactID,
     CASE persID WHEN 55 THEN contactID ELSE persID END newColumn
FROM
    .......