2016-11-17 195 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