我不确定我的问题是否正确。我正在使用sql server 2014管理工作室。
我有这张桌子:
|------------------|--01/12/2016--|--02/12/2016--|--03/12/2016--|--04/12/2016--|<br>
|----Place------|--Count--Value| Count --Value| Count-- Value|-- Count--value<br>
|--London------| random data--|random data--|-------------------|--------------------|
|--Manchester|-------------------|------------------|random data---|---------------------|
|--Birmingham|--------------------|---etc------------|etc----------------|-etc------------------|
|--Leeds--------|
|--Luton---------|
|--Scotland-----|
我想要做的是将日期从列标题转换为行,所以它看起来像这样:
Place ----------|---dates------| Count--------| Value<br>
London --------|01/12/2016
Manchester --|01/12/2016
Birmingham --|01/12/2016
Leeds ---------|01/12/2016
Luton ----------|01/12/2016
Scotland ------|01/12/2016
London-------- |02/12/2016
Manchester-- |02/12/2016
Birmingham-- |02/12/2016
Leeds ---------|02/12/2016
Luton ----------|02/12/2016
Scotland------ |02/12/2016
London --------|03/12/2016
Manchester --|03/12/2016
Birmingham --|03/12/2016
Leeds ----------|03/12/2016
Luton -----------|03/12/2016
Scotland -------|03/12/2016
London ---------|04/12/2016
Manchester ---|04/12/2016
Birmingham ---|04/12/2016
Leeds ----------|04/12/2016
Luton----------- |04/12/2016
Scotland -------|04/12/2016
我搜索过移调数据,但似乎没有人覆盖这种情况。
答案 0 :(得分:0)
您希望取消数据。我认为cross apply
是最简单的方法:
select v.*
from t cross apply
(values (city, cast('2016-01-12' as date), [01/12/2016]),
(city, cast('2016-02-12' as date), [02/12/2016]),
(city, cast('2016-03-12' as date), [03/12/2016]),
. . .
) v(city, dte, cnt);
请注意,这会使第二列成为真正的日期。
答案 1 :(得分:0)
您可以通过R中名为“ reshape”的库获得所需的输出
简单的代码:
reshape::melt(DF,id="Place")
如果还有其他任何依赖列(如place),则可以遵循此代码。
reshape::melt(DF,id=c("Place","Type"))