如何使用SQL Server将一行数据值转换为两行数据值?

时间:2014-03-20 22:38:50

标签: sql sql-server

你可以帮我吗

select emp_id Emp ID,start_time timing,last_time timing
from data 
where (emp_id=5500 and date_id='3/18/2014')

实际输出是,

Emp ID  timing                       timing
5500    03/18/2014 18:30:08             03/18/2014 19:23:09           

我需要以下输出

Emp ID    timing
5500    03/18/2014 18:30:08
5500    03/18/2014 19:23:09  

如何获得此输出?请帮助我,我不知道如何获得这些数据。谢谢你提前!

4 个答案:

答案 0 :(得分:3)

您只能union两个选择:

select emp_id Emp ID, start_time timing
from data 
where (emp_id=5500 and date_id='3/18/2014')

union all

select emp_id Emp ID, last_time timing
from data 
where (emp_id=5500 and date_id='3/18/2014')

答案 1 :(得分:0)

另一种方法是使用unpivot。以下通常具有相同的性能:

select emp_id as "Emp ID",
       (case when n.n = 1 then start_time
             else last_time
        end) as timing
from data cross join
     (select 1 as n union all select 2) n
where emp_id = 5500 and date_id = '2014-03-18';

答案 2 :(得分:0)

如果你有很多行,那么联盟全部或交叉加入需要时间.. 或者,您可以选择两个不同的查询,如

  

从数据中选择emp_id Emp ID,start_time计时(emp_id = 5500   和date_id ='3 / 18/2014')

     

从数据中选择emp_id Emp ID,last_time计时(emp_id = 5500   和date_id ='3 / 18/2014')

从使用通用列表的代码后面你可以合并两个列表对象,如

  

列出a = new List();列表b =新   列表();

     

a.AddRange(B);

答案 3 :(得分:0)

尝试删除where子句。对于多行,它将起作用!

select emp_id Emp ID, start_time timing
from data 

union all

select emp_id Emp ID, last_time timing
from data