我有一个以下格式的表格
Country_Code | 1960 | 1961 | 1962 | ..... | 2011
------------------------------------------------
IND | va11 | va12 | va13 | ..... | va1x
AUS | va21 | va22 | va23 | ..... | va2x
ENG | va31 | va32 | va33 | ..... | va3x
我想将其转换为以下格式
Country_Code | Year | Value
---------------------------
IND | 1960 | va11
IND | 1961 | va12
IND | 1962 | va13
.
.
IND | 2011 | va1x
AUS | 1960 | va21
AUS | 1961 | va22
AUS | 1962 | va23
.
.
AUS | 2011 | va2x
ENG | 1960 | va31
ENG | 1961 | va32
ENG | 1962 | va33
.
.
ENG | 2011 | va3x
如何通过sql查询或sql服务器程序集实现此目的?
您可以完成UNPIVOT
。如果您知道已知的列数,则可以对值进行硬编码:
select Country_Code, year, value
from yourtable
unpivot
(
value
for year in ([1960], [1961], [1962], [2011])
) u
参见带有演示的SQL Fiddle
如果列数未知,则可以使用动态sql:
DECLARE @colsUnpivot AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @colsUnpivot = stuff((select ','+quotename(C.name)
from sys.columns as C
where C.object_id = object_id('yourtable') and
C.name != 'Country_Code'
for xml path('')), 1, 1, '')
set @query
= 'select country_code, year, value
from yourtable
unpivot
(
value
for year in ('+ @colsunpivot +')
) u'
exec(@query)
参见带有演示的SQL Fiddle
您甚至可以使用UNION ALL
:
select country_code, '1960' year, 1960 value
from yourtable
union all
select country_code, '1961' year, 1961 value
from yourtable
union all
select country_code, '1962' year, 1962 value
from yourtable
union all
select country_code, '2011' year, 2011 value
from yourtable
我有以下布尔值表: 我想创建一个具有相同索引的新数据帧,但每行都有前一列的前三个 True 列名。 如果一行少于三个真值,则新数据帧将具有空值。
问题内容: 我有一个SQL查询返回1行,其中包含多个列标题: 有没有一种方法可以将该行转换为2列,即: 这是在SQLServer 2008 r2上运行 编辑:添加一个更好的例子 来自一个简单的 类型查询。我要显示的是: 问题答案: 试试这个
我是数据科学的初学者,我正在尝试使用Pandas来旋转此数据框架: 所以它变成这样:(标签应该变成列,文件路径变成行。) “标签”列是一组或一类文件路径。我想把它转换成这样一种方式,它适合这个函数:tf。Keras.preprocessing.image.flow_from_dataframe 提前感谢所有帮助我的人。
问题内容: 考虑下面的示例,其中有一个包含人员记录的 Person 表和一个包含链接到人员的可选属性的 PersonAttribute 表: Table: Person Table PersonAttribute 我将如何编写一个查询,使所有具有属性的人都像列一样返回?我需要的结果集是: 因此,从本质上讲,我需要编写一个查询,该查询将获取所有带有所有唯一属性键的人记录,这些键被转换为具有每个人记录
问题内容: 我的表包含以下列: 我想显示如下: 如您所见,我想将列与自定义列名成对显示。这对是列A和B,列C和D以及列C和D。 问题答案:
问题内容: 可以说我在PostgreSQL中有一个带有以下各列的表: 我插入了这两行: 我想将上面的行转换为此(在PostgreSQL中进行选择): 调用PHP 并得到这样的东西: 但是现在,如果我用php调用,我会得到: 希望有人能帮助我解决这个问题,谢谢大家 问题答案: 在9.4中很简单(使用了LATERAL join和jsonb函数): 确切结果: