当前位置: 首页 > 面试题库 >

三列SQL PIVOT

南门茂才
2023-03-14
问题内容

我如何使用SQL PIVOT命令对看起来像这样的数据进行sql透视?

id           |    field     |   value
---------------------------------------
1            |    year      |   2011
1            |    month     |   August
2            |    year      |   2009
1            |    day       |   21
2            |    day       |   31
2            |    month     |   July
3            |    year      |   2010
3            |    month     |   January
3            |    day       |   NULL

变成这样的东西:

id  |  year  |  month  |  day
-----------------------------
1     2011     August    21
2     2010      July     31
3     2009     January   NULL

问题答案:

尝试这样的事情:

DECLARE @myTable AS TABLE([ID] INT, [Field] VARCHAR(20), [Value] VARCHAR(20))
INSERT INTO @myTable VALUES ('1', 'year', '2011')
INSERT INTO @myTable VALUES ('1', 'month', 'August')
INSERT INTO @myTable VALUES ('2', 'year', '2009')
INSERT INTO @myTable VALUES ('1', 'day', '21')
INSERT INTO @myTable VALUES ('2', 'day', '31')
INSERT INTO @myTable VALUES ('2', 'month', 'July')
INSERT INTO @myTable VALUES ('3', 'year', '2010')
INSERT INTO @myTable VALUES ('3', 'month', 'January')
INSERT INTO @myTable VALUES ('3', 'day', NULL)

SELECT [ID], [year], [month], [day]
FROM
(
      SELECT [ID], [Field], [Value] FROM @myTable
) t
PIVOT
(
    MIN([Value]) FOR [Field] IN ([year], [month], [day]) 
) AS pvt
ORDER BY pvt.[year] DESC

这将产生以下结果:

ID  year    month   day
1   2011    August  21
3   2010    January NULL
2   2009    July    31


 类似资料:
  • 列表是 Lisp 的基本数据结构之一。在最早的 Lisp 方言里,列表是唯一的数据结构: “Lisp” 这个名字起初是 “LISt Processor” 的缩写。但 Lisp 已经超越这个缩写很久了。 Common Lisp 是一个有着各式各样数据结构的通用性程序语言。 Lisp 程序开发通常呼应着开发 Lisp 语言自身。在最初版本的 Lisp 程序,你可能使用很多列表。然而之后的版本,你可能换

  • 我在excel中有一个列,其中包含名字、姓氏和职位名称的混合。唯一可以观察到的模式是——在每一组3行中,每第1行是名字,第2行是姓氏,第3行是工作标题。我想创建3个不同的列,并隔离此数据示例数据: 我想要:约翰,布什,经理,作为一行,分别放在名字,姓氏和职务下面的三个不同的栏中。像- 我们如何才能完成这项任务?

  • 在日常生活中,人们经常使用列表:待办事项列表,购物清单,十佳榜单,最后十名榜单等。计算机也在使用列表,尤其是列表中元素保存的是太多时。当不需要一个很长的序列中查找元素,或对其进行排序时,列表显得尤为有用。反之,如果数据结构非常复杂,列表的作用就没有那么大了。 本章展示了如果创建一个简单的列表类,我们首先给列表给出抽象的数据类型定义,然后描述如何实现抽象数据类型(ADT),最后,分析几个列表适合解决

  • 调用API: POST https://ppmessage.com/api/xxxxx https header应为(xxxx应该用token替代): { 'Content-Type': 'application/json', 'Authorization': 'OAuth xxxxx' } api_level:获取到的token有固定的api level,使用该token只用调用

  • 本章会聚焦于 OCaml 中两个常用编程元素:列表和模式匹配。在第一章导览中对它们都有过介绍,但这里我们会更深入,把这两个概念放在一起,并互相诠释。 列表基础 OCaml 的列表是一个不可变的、有限的同类型元素序列。如我们所见,OCaml 列表可以使用方括号和分号来创建: # [1;2;3];; - : int list = [1; 2; 3] (* OCaml Utop ∗ lists-and

  • 问题内容: 我正在尝试从DbgView日志文件中删除前两列(我对此不感兴趣)。我似乎找不到从第3列开始直到行尾打印的示例。请注意,每行都有可变的列数。 问题答案: …或更简单的解决方案: 只需添加正确的定界符(-d),您将获得相同的效果。