基于列值的SQL选择取消枢轴/基于列的枢轴基于行的选择

问题描述 投票:0回答:1

我发现了很多类似的案例,但没有,让我解释一下,

我有一个看起来像这样的表:

enter image description here

D列的值是目标ID,其他GRC列都是其值的目标(我只是放置了虚拟值)

该表有点棘手,因为它看起来像一个数据透视表,我尝试取消对其进行透视但没有成功。有超过200个目标列,因此该想法是仅选择列D中的目标列。我通过IN BUT实现了新目标的使用,然后必须更改它,使其完全不动态。

我的问题是,有可能从col是D中的col那里选择“ col”,就像从col D en中选择一个不同的值,然后选择D的位置]


+-----+-----+-----+-------+------------+---------+----------+--------+-------+-------+-------------+
|  A  |  B  |  C  |   D   |     Date   |  GRC03  |    GRC06 | GRC08  | GRC21 | GRC25 |    GRC29    |
+-----+-----+-----+-------+------------+---------+----------+--------+-------+-------+-------------+
| XXX | yyy | zzz | GRC03 | 01/01/2020 |     567 |       89 |     65 |     1 |    87 |          23 |
| Xxx | yyy | zzz | GRC06 | 01/01/2020 |     989 |       76 |     43 |     2 |    56 |          24 |
| XXX | yyy | zzz | GRC08 | 02/01/2020 |      67 |       54 |     21 |     3 |    67 |          89 |
| XXX | yyy | zzz | GRC03 | 02/01/2020 |      41 |       38 |     -1 |     4 |    50 | 111,3333333 |
| Xxx | yyy | zzz | GRC06 | 02/01/2020 |    -209 |     20,5 |    -23 |     5 |    40 | 144,3333333 |
| XXX | yyy | zzz | GRC08 | 03/01/2020 |    -459 |        3 |    -45 |     6 |    30 | 177,3333333 |
+-----+-----+-----+-------+------------+---------+----------+--------+-------+-------+-------------+

我想要的结果

+------------+-------+-------------+
|    DATE    |    D  |   RESULTS   |
+------------+-------+-------------+
| 01/01/2020 | GRC03 |         567 |
| 01/01/2020 | GRC06 |          89 |
| 02/01/2020 | GRC08 |          21 |
| 02/01/2020 | GRC21 |           4 |
| 02/01/2020 | GRC25 |          67 |
| 03/01/2020 | GRC29 | 177,3333333 |
+------------+-------+-------------+

我发现了很多类似的情况,但没有,让我解释一下,我有一个看起来像这样的表:D列值是目标ID,其他GRC列都是它们的值的目标(I ...] >

sql tsql select case col
1个回答
0
投票

我认为您想要case表达式:

select d, date,
       (case when d = 'GRC03' then GRC03
             when d = 'GRC06' then GRC06
             when d = 'GRC08' then GRC08
             when d = 'GRC21' then GRC21
             when d = 'GRC25' then GRC25
             when d = 'GRC29' then GRC29
        end) as results
from t;
© www.soinside.com 2019 - 2024. All rights reserved.