在SQL查询中使用If语句

时间:2013-09-05 05:15:36

标签: sql sql-server if-statement case

我有两个表,Table1和Table 2.两个列中的列相同。我想根据table2中的列是否有条目来提取数据。我的意思是,如果一个数据在两个表中都有一个列的条目,那么我想从table2中提取数据(如果不是表1)。

以下是表结构的示例。

表1:Ticket_details

   TIcketID| SubmittedBy|Priority| Ticket_description|current_status
    2010       1000       High      blah...blah        current_assigned
    2020       1000       Normal    gggggggggg         current_assigned
    2030       1100        Low      hhhhhhhhhhhh       current_description

表2:TICKET_EDIT_DETAILS

    TIcketID| Priority| Ticket_description|
      2020       Low    gggggggggghhhh        

在此示例中,ticketId 2020在表2中有一个条目。所以我想从表2中提取Priorityticket_description但是TicketIds 2010和2030在表2中没有条目,所以我想提取列Priority和{{1从表1开始。

我该怎么做?

2 个答案:

答案 0 :(得分:3)

我想这就是你要找的东西:

SELECT t1.ticketId, t1.submittedBy,
  COALESCE(t2.priority, t1.priority),
  COALESCE(t2.ticket_description, t1.ticket_description),
  t1.current_status
FROM table1 t1
LEFT JOIN table2 t2 ON t1.ticketId = t2.ticketId

小提琴here

请记住,此解决方案实际上假设在table2上Priority和TIcket_description不为null。如果它们为null,那么将使用table1中的那些字段。

答案 1 :(得分:3)

试试这个。我想,它给你想要的东西。

SELECT
    td.[TIcketID],
    td.[SubmittedBy],
    (CASE WHEN ted.[Priority] IS NOT NULL THEN ted.[Priority] ELSE td.[Priority] END)AS [priority],
    (CASE WHEN ted.[Ticket_description] IS NOT NULL THEN ted.[Ticket_description] ELSE td.[Ticket_description] END)AS [Ticket_description],
    td.[current_status]
FROM Ticket_details td
LEFT OUTER JOIN TICKET_EDIT_DETAILS ted ON td.[TIcketID]=ted.[TIcketID]

以下是SQLFiddle

相关问题