我有一个大型查询,我正在构建,但要求它们转动并显示所有分隔的行(按仓库),以显示在股票代码的单数行()中。以下是我的疑问:
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
有什么建议吗?
答案 0 :(得分:1)
听起来你需要将列UNPIVOT成行。正如另一张海报指出的那样,如果没有样本数据或了解有关数据库布局的更多信息,那么提供“开箱即用”的特定解决方案有点困难。话虽如此,这里有一个关于如何使用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的工作原理。您可能需要稍微调整此脚本以满足您的需求。希望这可以帮助。