【发布时间】:2020-09-30 07:21:15
【问题描述】:
我对 SQL 很陌生,更不用说在 SSMS 中做 PIVOTS。在做了一些研究之后,我很难为两列做枢轴。
我查询时的数据本身是:
SELECT
INSTRUMENT_ID,
VALUE_TYPE_CODE,
ORIGINAL_TRANSACTION_VALUE,
VALUE_IN_HOME_CURRENCY
FROM
FACT_TABLE
INSTRUMENT_ID | VALUE_TYPE_CODE | ORIGINAL_TRANSACTION_VALUE | VALUE_IN_HOME_CURRENCY
ABC |TOT_AMT | 3 | 5.7702
ABC |AMT_AVAL | 1 | 1.9234
ABC |DRWN_AMT | 2 | 3.8468
ABC |MTD_DRWN | 2 | 3.8468
以ORIGINAL_TRANSACTION_VALUE
为中心SELECT *
FROM
(
SELECT INSTRUMENT_ID,
VALUE_TYPE_CODE,
ORIGINAL_TRANSACTION_VALUE,
VALUE_IN_HOME_CURRENCY
FROM FACT_TABLE
)
AS Table
PIVOT (MAX (ORIGINAL_TRANSACTION_VALUE) FOR VALUE_TYPE_CODE IN ([TOT_AMT],
[AMT_AVAL],
[DRWN_AMT],
[MTD_DRWN])) as piv
结果如预期:
INSTRUMENT_ID | TOT_AMT | AMT_AVAL | DRWN_AMT | MTD_DRWN
ABC |3 | 1 | 2 | 2
但是,我正在尝试生成以下内容 - 请注意每个 VALUE_TYPE_CODE 类别的交替 ORIGINAL_TRANSACTION_VALUE 和 VALUE_IN_HOME_CURRENCY 值
INSTRUMENT_ID |TOT_AMT |TOT_AMT |AMT_AVAL |AMT_AVAL |DRWN_AMT |DRWN_AMT |MTD_DRWN |MTD_DRWN
ABC | 3 |5.7702 | 1 |1.9234 |2 |3.8468 | 2 |3.8468
所以我尝试了从这里找到的以下内容。它看起来很简单,而且我还是新 SQL,所以对我来说很有意义。复制类别值,否则 PIVOT 将无法正常工作。
SELECT *
FROM
(
SELECT INSTRUMENT_ID,
VALUE_TYPE_CODE,
VALUE_TYPE_CODE+'1' as VALUE_TYPE_CODE1,
ORIGINAL_TRANSACTION_VALUE,
VALUE_IN_HOME_CURRENCY
FROM FACT_TABLE
)
AS Table
-- Pivot on ORIGINAL_TRANSACTION_VALUE
PIVOT (MAX (ORIGINAL_TRANSACTION_VALUE) FOR VALUE_TYPE_CODE IN ([TOT_AMT],
[AMT_AVAL],
[DRWN_AMT],
[MTD_DRWN])) as piv
-- Pivot on VALUE_IN_HOME_CURRENCY
PIVOT (MAX (VALUE_IN_HOME_CURRENCY) FOR VALUE_TYPE_CODE1 IN ([TOT_AMT1],
[AMT_AVAL1],
[DRWN_AMT1],
[MTD_DRWN1])) as piv1
不幸的是,这并没有按照我希望的方式工作,结果如下:
INSTRUMENT_ID |TOT_AMT |TOT_AMT |AMT_AVAL |AMT_AVAL |DRWN_AMT |DRWN_AMT |MTD_DRWN |MTD_DRWN
ABC | 3 |5.7702 | NULL |NULL |NULL |NULL |NULL |NULL
ABC | NULL |NULL | 1 | 1.9234 |NULL |NULL |NULL |NULL
ABC | NULL |NULL | NULL |NULL |2 |3.8468 |NULL |NULL
ABC | NULL |NULL | NULL |NULL |NULL |NULL | 2 |3.8468
我想知道是否有人能指出我做错了什么?有没有稍微简单一点的方法?本身可能不是一种更简单的方法,而是一种通过一些解释分解的解决方案。我在这里查看了一些解决方案,其中很多只是让我头疼,因为我还是新手。
我非常感谢任何帮助。谢谢。
【问题讨论】:
标签: sql sql-server pivot