Return 行作为单行中动态命名的列 MS T-SQL 希望它是一个 VIEW

Return Rows as Dynamically named Columns in a single row MS T-SQL would like it to be a VIEW

我有 Table 个项目,其中有一些列 [Id]、[ItemOrdinal]、[Amount]、[Qty]

[ItemOrdinal] 是一个整数,基本上表示导入文件中的嵌入 ID。 此 table 是从具有 Item1Amt.
字段的文件翻译而来的数据 我遇到的问题是遗留系统需要像查看旧系统一样访问数据。

所以我希望能够 return 一个视图 - 我一直在阅读有关 CTE 和 Pivot table 的内容,我的想法更符合 CTE,基本上我创建了视图中的列并插入其中

How can I get a result set with columns named like this Item[ItemOrdinal]Amt, Item[ItemOrdinal]Qty preferably in a View typically the max number of rows will be 8 rows?

Item1Amt, Item1Qty, Item2Amt, Item2Qty, ...Item8Amt, Item8Qty

我正在看答案here^

DB Fiddle Example of the tables Table 2 of the examples in particular

您可以左连接所有 8 个项目 table 并在没有主元的情况下呈现它们。

假设基数 table 是 MyBaseTable 而你又是 8 tables Item1 ... Item8.

Select
 [Id],
 [ItemOrdinal],
 [Amount],
 [Qty],

 Item1.Amt as Item1Amt,
 Item1.Qty as Item1Qty,

 Item2.Amt as Item2Amt,
 Item2.Qty as Item2Qty,

 Item3.Amt as Item3Amt,
 Item3.Qty as Item3Qty,

 Item4.Amt as Item4Amt,
 Item4.Qty as Item4Qty,

 Item5.Amt as Item5Amt,
 Item5.Qty as Item5Qty,

 Item6.Amt as Item6Amt,
 Item6.Qty as Item6Qty,

 Item7.Amt as Item7Amt,
 Item7.Qty as Item7Qty,

 Item8.Amt as Item8Amt,
 Item8.Qty as Item8Qty

From MyBaseTable as Base
Left Join Item1 on Item1.[ItemOrdinal] = Base.[ItemOrdinal]
Left Join Item2 on Item2.[ItemOrdinal] = Base.[ItemOrdinal]
Left Join Item3 on Item3.[ItemOrdinal] = Base.[ItemOrdinal]
Left Join Item4 on Item4.[ItemOrdinal] = Base.[ItemOrdinal]
Left Join Item5 on Item5.[ItemOrdinal] = Base.[ItemOrdinal]
Left Join Item6 on Item6.[ItemOrdinal] = Base.[ItemOrdinal]
Left Join Item7 on Item7.[ItemOrdinal] = Base.[ItemOrdinal]
Left Join Item8 on Item8.[ItemOrdinal] = Base.[ItemOrdinal]

新答案基于新 fiddle SQL Fiddle:

Select
 Base.[Id],
 Base.[ItemOrdinal],
 Base.[ItemDesc],
 Base.[ItemAmt],
 Base.[ItemQty],

 Item3.[ItemAmt] as Item3Amt,
 Item3.[ItemQty] as Item3Qty,

 Item4.[ItemAmt] as Item4Amt,
 Item4.[ItemQty] as Item4Qty

From [dbo].[Tbl_2] as Base
Left Join Tbl_3 as Item3 on Item3.[ItemOrdinal] = Base.[ItemOrdinal]
Left Join Tbl_4 as Item4 on Item4.[ItemOrdinal] = Base.[ItemOrdinal]