我正在尝试使用字符串拆分来传递列名,因为我需要该表中的值才能与另一个表连接。
我已经在 Postgresql 中实现了这一点,我从这些列中获取了值:
SELECT unnest(array["column_name1","column_name2","column_name3" AS "amount"
FROM table1
unnest 与列名周围的引号相结合,为每个值返回一个数组到一组行。
Amount
307579.00
25579.00
212871.00
现在我想在 MS Server 中做同样的事情:
DECLARE @amount NVARCHAR(50) = 'column_name1/column_name2/column_name3'
SELECT "value" from string_split(@amount,'/')
但这只会给我文字字符串:
Amount
column_name1
column_name2
column_name3
我一直在尝试和搜索如何传递一个 elemant,它将读取为列名并像第一个示例一样在一个列中显示值,也许我不应该使用字符串拆分器等。有点卡在这个..
您需要通过构建一个全新的 SELECT 查询来使用动态 SQL 来实现您的逻辑。
例如:
它的输出将是:
为了获取单个列下的所有值,您需要“取消透视”数据。有两种主要方法可以做到这一点。一种是通过标准的 UNPIVOT 命令,如下所示:
它的输出将是:
另一种方法是将 CROSS APPLY 与 Values 构造函数一起使用,如下所示:
它的输出将是:
db<>在这里摆弄