我如何确定 3 个内部连接表中的数据以在一列上进行透视

How can i det data in 3 inner joined tables to pivot on one column

我有一个正在构建的大型查询,但要求它们旋转并显示所有分隔的行(按仓库)以按股票代码显示在单个行 () 中。以下是我的查询:

SELECT DISTINCT RTRIM(IMB.StockCode) StockCode
, IM.Description
, IM.CostUom
, IM.StockOnHold
, IV.LastCostEntered
, IV.UnitCost
, IV.Warehouse
, IM.Supplier
, IM.StockUom
, IM.AlternateUom
, IM.OtherUom
FROM InvMultBin IMB
INNER JOIN InvMaster IM ON IMB.StockCode=IM.StockCode
    INNER JOIN InvWarehouse IV ON IV.StockCode=IMB.StockCode
WHERE IMB.LastIssueDate >GETDATE()-YEAR(1) AND IV.Warehouse LIKE '%'
ORDER BY StockCode

那么这就是它产生的结果(至少前 15 行):

StockCode   Description CostUom StockOnHold LastCostEntered UnitCost    Warehouse   Supplier    StockUom    AlternateUom    OtherUom
AF0006  No 8 Fomopak                    125     38.06750    38.06750     C1 0001255 125 500 125
AF0006  No 8 Fomopak                    125     39.27750    39.27750    P1  0001255 125 500 125
AF0006  No 8 Fomopak                    125     38.06000    38.06000    D1  0001255 125 500 125
AF0006  No 8 Fomopak                    125     38.06750    38.06750    J1  0001255 125 500 125
AF0006  No 8 Fomopak                    125     39.27750    39.13500    G1  0001255 125 500 125
AF0009  No 34 Fomopak                   125     56.92250    79.34897    G1  0001255 125 125 125
AF0009  No 34 Fomopak                   125     56.38000    56.75328    C1  0001255 125 125 125
AF0011  No 65S Fomopak                  375     61.42000    60.37000    B1  0001255 375 375 375
AF0011  No 65S Fomopak                  375     61.41000    60.46750    D1  0001255 375 375 375
AF0011  No 65S Fomopak                  375     59.52000    59.52000    C1  0001255 375 375 375
AF0011  No 65S Fomopak                  375     61.41750    60.06794    P1  0001255 375 375 375
AF0011  No 65S Fomopak                  375     61.41750    61.41750    G1  0001255 375 375 375
AF0011  No 65S Fomopak                  375     53.62000    53.62000    T1  0001255 375 375 375
AF0011  No 65S Fomopak                  375     61.41000    61.41000    J1  0001255 375 375 375
AF0012  No 69 Fomopak                   250     140.76500   140.76500   G1  0001255 250 250 250

我需要按列显示如下:

StockCode
Description
CostUom
StockOnHold
LastCostEntered
UnitCost
B1
C1
D1
G1
J1
M1
P1
T1
Supplier
StockUom
AlternateUom
OtherUom

有什么建议吗?

听起来您需要将列反透视为行。正如另一位发帖人指出的那样,在没有示例数据或对数据库布局了解更多的情况下,提供一个可行的特定解决方案 'out of the box' 有点困难。话虽如此,这里是对使用 UNPIVOT 在您的最终实现中的外观的尝试。

    WITH UNPIV_CTE
    AS
    (
    SELECT DISTINCT RTRIM(IMB.StockCode) StockCode
    , IM.Description
    , IM.CostUom
    , IM.StockOnHold
    , IV.LastCostEntered
    , IV.UnitCost
    , IV.Warehouse
    , IM.Supplier
    , IM.StockUom
    , IM.AlternateUom
    , IM.OtherUom
    FROM InvMultBin IMB
    INNER JOIN InvMaster IM ON IMB.StockCode=IM.StockCode
        INNER JOIN InvWarehouse IV ON IV.StockCode=IMB.StockCode
    WHERE IMB.LastIssueDate >GETDATE()-YEAR(1) AND IV.Warehouse LIKE '%'
    )
-- Start of UNPIVOT
    SELECT u.StockCode, u.Column_Names, u.Column_Values
    FROM UNPIV_CTE UnP
-- Two new columns created with self explanatory names.  
    UNPIVOT ( Column_Values FOR Column_Names IN ([Description]
    , CostUom
    , StockOnHold
    , LastCostEntered
    , UnitCost
    , Warehouse
    , Supplier
    , StockUom
    , AlternateUom
    , OtherUom )
    ) u
    ORDER BY u.StockCode DESC
    ;

它使用您的确切查询,但包含在 CTE 中,以便更容易查看 UNPIVOT 的工作原理。您可能需要稍微调整此脚本以满足您的需要。希望这可以帮助。