SQL - 转换列值
SQL - transform the column values
当我执行查询时:
select Number,
Name,
[Date and Time],
Value
from Source;
我得到以下结果:
但我想要这个结果:
这在 SQL 中可行吗?
您可以使用 case
表达式来 return 不同列中的 date/time 值:
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
是为了 return 一个名字的所有值在一行中。 (注意:每个名称只有一个值 1、2、3 将被 returned!)
使用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
当我执行查询时:
select Number,
Name,
[Date and Time],
Value
from Source;
我得到以下结果:
但我想要这个结果:
这在 SQL 中可行吗?
您可以使用 case
表达式来 return 不同列中的 date/time 值:
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
是为了 return 一个名字的所有值在一行中。 (注意:每个名称只有一个值 1、2、3 将被 returned!)
使用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