首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL动态旋转“周”表

SQL动态旋转“周”表
EN

Stack Overflow用户
提问于 2018-03-08 01:02:33
回答 2查看 420关注 0票数 3

表设计:

代码语言:javascript
复制
| PeriodStart | Person | Day1 | Day2 | Day3 | Day4 | Day5 | Day6 | Day7 |
-------------------------------------------------------------------------
| 01/01/2018  |  123   |  2   |  4   |  6   |  8   |  10  |  12  |  14  |
| 01/15/2018  |  246   |  1   |  3   |  5   |  7   |  9   |  11  |  13  |

我正在尝试创建一个支点语句,它可以动态地转置两行。

期望产出:

代码语言:javascript
复制
|    Date    | Person | Values |
--------------------------------
| 01/01/2018 |   123  |    2   |
| 01/02/2018 |   123  |    4   |
| 01/03/2018 |   123  |    6   |
| 01/04/2018 |   123  |    8   |
| 01/05/2018 |   123  |   10   |
| 01/06/2018 |   123  |   12   |
| 01/15/2018 |   246  |    1   |
| 01/16/2018 |   246  |    3   |
| 01/17/2018 |   246  |    5   |
 ... and so on. Date order not important

以下查询将有助于初始化事物:

代码语言:javascript
复制
DECLARE @WeekTable TABLE (
    [PeriodStart] datetime
    , [Person] int
    , [Day1] int
    , [Day2] int
    , [Day3] int
    , [Day4] int
    , [Day5] int
    , [Day6] int
    , [Day7] int
)

INSERT INTO @WeekTable(
    [PeriodStart],[Person],[Day1],[Day2],[Day3],[Day4],[Day5],[Day6],[Day7]
)
VALUES ('01/01/2018','123','2','4','6','8','10','12','14')
    ,('01/15/2018','246','1','3','5','7','9','11','13')
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-08 04:15:34

其他选项是使用APPLY运算符执行此操作。

代码语言:javascript
复制
SELECT DATEADD(DAY, Days-1, Dates) Date, a.Person, Value
FROM @WeekTable t CROSS APPLY (
    VALUES (PeriodStart, Person, 1, Day1), (PeriodStart, Person, 2, Day2),
           ..., (PeriodStart, Person, 7, Day7)
)a(Dates, Person, Days, Value)
票数 3
EN

Stack Overflow用户

发布于 2018-03-08 01:17:01

您可以使用unpivot将日期列转换回行,然后解析列名外的数字:

代码语言:javascript
复制
with periods as (
  select * from @WeekTable
  unpivot ([Values] for [Day] in (Day1, Day2, Day3, Day4, Day5, Day6, Day7))x
)

select dateadd(day, convert(int, substring(Day, 4, 1)), PeriodStart), Person, [Values]
from periods

小提琴

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49163768

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档