【发布时间】:2021-04-13 20:58:33
【问题描述】:
我如何编写一个 SQL 查询来返回计算一行中每一列的相似值?
我有这个:
| emp_no | d1 | d2 | d3 | d4 | d5 | d6 | d7 | d8 | d9 | d10 | date |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1002 | 2 | 2 | 2 | 26 | 26 | 4 | 4 | 53 | 53 | 53 | 2021-03-31 |
| 1003 | 4 | 4 | 4 | 26 | 26 | 2 | 26 | 26 | 26 | 26 | 2021-03-31 |
| 1002 | 2 | 2 | 2 | 26 | 26 | 4 | 4 | 26 | 26 | 26 | 2021-04-30 |
我想要这样的结果:
| emp_no | 2 | 4 | 26 | 51 | 53 | date |
|---|---|---|---|---|---|---|
| 1002 | 3 | 2 | 2 | 0 | 3 | 2021-03-31 |
| 1003 | 1 | 3 | 6 | 0 | 0 | 2021-03-31 |
| 1002 | 3 | 2 | 2 | 0 | 3 | 2021-04-30 |
我尝试使用UNPIVOT 数据,但我该如何调整它?
我是否使用未透视数据创建视图,然后重新透视聚合数据?
SELECT EMP_NO, TS_MTH_YR, TSS_D
FROM (
SELECT EMP_NO, TS_MTH_YR, [D1], [D2], [D3], [D4], [D5], [D6], [D7], [D8], [D9], [D10]
FROM TSS_MONTHLY_TS
) AS TSS
UNPIVOT (
TSS_D FOR TSS_DAYS IN ([D1], [D2], [D3], [D4], [D5], [D6], [D7], [D8], [D9], [D10])
) AS TS
【问题讨论】:
-
您实际上需要取消透视数据,然后重新透视聚合数据。你试过什么了?为什么它不起作用?
-
@Larnu 我该怎么做?
-
您使用的是哪个版本的 sql server ?
select @@version -
“我是怎么做到的?”展示你的尝试?使用edit 功能@AlQaqaaBenghuzi。
-
使用 SQL 查询,您可以选择之前已知的列。你知道这些专栏吗?您知道您要选择的总是第 2、4、26、51 和 53 列吗?或者未来还能有其他价值吗?如果是这样,您需要一种动态方法。最简单的方法可能是简单地
select *,然后让您的应用逐行、逐列读取并在该过程中构建网格。
标签: sql sql-server tsql pivot sql-server-2017