2016-08-02 60 views
-4

当我执行查询:SQL - 变换的列值

select Number, 
     Name, 
     [Date and Time], 
     Value 
from Source; 

我得到以下结果:

enter image description here

但我想这样的结果:

enter image description here

这是可能的SQL?

+1

哪里是你的查询和数据库管理系统? – Ash

+0

代码在哪里? –

+0

我添加的代码,我使用sql – pape

回答

1

使用COALESCE(MAX(CASE您可以获得预期的结果。

样品执行与给定的样本数据:

DECLARE @Source TABLE (Number INT, Name VARCHAR (100), DateAndTime VARCHAR (20), Value INT); 

INSERT INTO @Source(Number, Name, DateAndTime, Value) VALUES 
(1, 'Tom', '1.5.2016 11:29', 1), 
(1, 'Tom', '2.5.2016 10:45', 2), 
(2, 'Angelina', '7.5.2016 11:36', 1), 
(3, 'Fibi', '1.5.2016 11:34', 2), 
(3, 'Fibi', '1.5.2016 11:56', 3); 

SELECT Number, Name, 
     COALESCE(MAX(CASE WHEN Value = 1 THEN DateAndTime END), '') AS [1], 
     COALESCE(MAX(CASE WHEN Value = 2 THEN DateAndTime END), '') AS [2], 
     COALESCE(MAX(CASE WHEN Value = 3 THEN DateAndTime END), '') AS [3] 
FROM @Source 
GROUP BY Number, Name 
ORDER BY Number 

结果:

Number Name  1    2    3 
------------------------------------------------------------------ 
1  Tom   1.5.2016 11:29 2.5.2016 10:45 
2  Angelina 7.5.2016 11:36  
3  Fibi      1.5.2016 11:34 1.5.2016 11:56 
+0

非常感谢,就是这样 – pape

1

您可以使用case表达式在不同列返回日期/时间值:

select Number, Name, 
     max(case when Value = 1 then [Date and Time] end) as [1], 
     max(case when Value = 2 then [Date and Time] end) as [2], 
     max(case when Value = 3 then [Date and Time] end) as [3] 
from Source 
group by Number, Name 

GROUP BY有没有在一个单行返回名称的所有值。 (注意:每个姓名只会返回一个值1,2,3!)

+0

我得到了两行汤姆,第一次为值1,第二次为值2 ...我想所有在一行... – pape

+0

对不起,错过了那个细节。将编辑。 – jarlh