2016-11-17 147 views
-1

我们正在处理任务和假日项目。SQL将行转换为列

表的结果是:

  Rn TicketNo task    Assigned emp 
      1 a   Holdiay    sunday  emp_A 
      2 a   Task A completed monday  emp_A 
      1 b   Holiday    sunday  emp_B 
      2 b   Task A completed monday  emp_B 

我想下面的结果。

  TicketNo emp  sunday monday 
      a   emp_A Holdiay Task A completed 
      b   emp_B Holiday Task A completed 

我想查询没有使用数据透视。 thannks求助。

+1

您使用的是MySQL还是Oracle?不要标记产品不参与... – jarlh

+1

我正在使用SQL Server 2008.先生 – ksu

+0

请格式化您的表,使他们看起来像...表 –

回答

0

您可以使用下面的quries将行数据转换为列。试试吧。

1.使用旋转

  select distinct TicketNo,emp,sunday,monday 
      from 
      (
       select distinct TicketNo ,task, Assigned,emp from <tbl_name> 
      ) src 
      pivot 
      (
       max(task) 
       for Assigned in (sunday, monday) 
      ) piv 

2.使用连接:(不透视)

  select a.ticketno, 
        a.emp 
        ,a.task as sunday 
        ,b.task as monday 
        from <tbl_name> a join <tbl_name> b 
        on a.assigned='sunday' and b.assigned='monday' 
        and a.ticketno=b.ticketno 
+0

寻求帮助。问题解决了。 – ksu

0

我使用子查询和加入尝试了不同的方式。无论如何,高兴你已经有了答案。

SELECT * INTO YOUR_TABLE FROM 
(   SELECT 1 AS Rn,'a' AS TicketNo,'Holiday' as task,'sunday' as Assigned,'emp_A' as emp 
      UNION ALL 
      SELECT 2,'a','Task A completed','monday','emp_A' UNION ALL 
      SELECT 1,'b','Holiday','sunday','emp_B' UNION ALL 
      SELECT 2,'b','Task A completed','monday','emp_B' 
) X 

SELECT * FROM YOUR_TABLE 


SELECT T1.TicketNo 
     ,T1.emp 
     ,T1.Sunday 
     ,T2.Monday 
FROM  
(SELECT TicketNo 
     ,emp 
     ,CASE WHEN task='Holiday' then 'Holiday' end as Sunday 
FROM YOUR_TABLE 
WHERE CASE WHEN task='Holiday' then 'Holiday' end IS NOT NULL) T1 

JOIN 

(SELECT TicketNo 
     ,emp 
     ,CASE WHEN task='Task A completed' then 'Task A completed' end as Monday 
FROM YOUR_TABLE 
WHERE CASE WHEN task='Task A completed' then 'Task A completed' end IS NOT NULL) T2 

ON T1.TicketNo = T2.TicketNo