如何将列值转换为多列?

How can I pivot column values into multiple columns?

我正在尝试将一列的值转换为多列。这是来自以下 AX table 的示例:

AAAREFNUMVALUE  AAATRANSPORTTABLE   AAAREFNUMTYPE
5000130742      5637146247              2
01832007        5637146247              3
14252108        5637146247              1
NS              5637146247              8
5000131013      5637146248              2
01829347        5637146248              3
11910275        5637146248              1
NS              5637146248              8

下面是我需要使用 SQL 的 excel 报告的最终结果。它在同一行上具有所有相关字段。 AAATRANSPORTTABLE 字段与值相关,而 AAAREFNUMTYPE 是我希望新列的排列方式:

Alpha Pro Number     Shippers BL #          PO Number     Shippers Number
11910275          SA03261264             01829347        NS
14252108          SA03256804             01832007        NS

我尝试使用多个 SELECT 语句来过滤数据,但是我收到以下错误:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

我已经考虑过 PIVOT 和 MERGE 函数,尽管我很难想象如何解决这个问题。我提供的数据是问题的简化版本,但任何方向都将不胜感激。

SELECT    AAAREFNUMVALUE AS 'Alpha Pro Number',
          AAATRANSPORTTABLE AS 'Table ID',
          AAAREFNUMTYPE AS 'Number Type',
          (SELECT AAAREFNUMTYPE 
          FROM dbo.AAATOREFNUMS 
          WHERE AAAREFNUMTYPE = 2) AS 'Shippers BL#'
FROM          dbo.AAATOREFNUMS
WHERE        (AAAREFNUMTYPE = 1)

您可以使用子查询执行此操作,但它需要关联:

SELECT a.AAAREFNUMVALUE AS "Alpha Pro Number",
       a.AAATRANSPORTTABLE AS "Table ID",
       a.AAAREFNUMTYPE AS "Number Type",
       (SELECT a2.AAAREFNUMTYPE 
        FROM dbo.AAATOREFNUMS a2
        WHERE a2.AAATRANSPORTTABLE  = a.AAATRANSPORTTABLE  AND
             a2.AAAREFNUMTYPE = 2
       ) AS "Shippers BL#"
FROM dbo.AAATOREFNUMS a
WHERE AAAREFNUMTYPE = 1 ;

我强烈建议您不要使用单引号来引用标识符。单引号应该只用于字符串和日期常量。我将它们更改为适用于大多数数据库的双引号。