如何将变量连接到特定行
Posted
技术标签:
【中文标题】如何将变量连接到特定行【英文标题】:How to join variable to specific row 【发布时间】:2021-03-18 18:59:31 【问题描述】:我正在尝试在 SQL Server 中按行加入变量。但是,我不确定如何选择性地映射它们。我有以下内容:
declare @p1 nvarchar(max) = '[i:1, n:"one"]'
declare @p2 nvarchar(max) = '[i:2, n:"two"]'
declare @p3 nvarchar(max) = '[i:3, n:"three"]'
select
[noRow] = row_number() over(order by [number] asc),
[table],
[data1] = sd.one,
[data2] = sd.two
from someDb sd
inner join @p1 on [noRow] = 1
inner join @p2 on [noRow] = 2
inner join @p2 on [noRow] = 3
-- etc.
期望的输出
| noRow | data1 | data2 | table |
|-------+-------+-------+-------|
| 1 | a | b | @p1 |
| 2 | c | d | @p2 |
| 3 | e | f | @p3 |
如何将这些变量连接到 SQL Server 中的特定行?
【问题讨论】:
数据库是什么版本的 SQL Server?这很重要,因为 SQL 2016 内置了 JSON 解析。最好的方法是将您的 JSON 解析为临时表,然后在您的临时表上进行连接。或者查看JSON解析,如果大小不太复杂,您可以直接进行。 2016.我希望将 json 按行存储在单个表格单元格中。 那么我建议首先解析每个 JSON,然后加入数据库中需要加入的字段。 样本数据加上预期结果将有助于澄清。 它仍然远未明确您想要的输出是什么......也不知道表格如何发挥作用。 【参考方案1】:从您的 cmets 看来,您希望在 table
列中显示实际变量名称。我不太明白你为什么要这样,但这里有你的选择:
select
sd.noRow,
sd.data1,
sd.data2,
v.[table]
from (
select
noRow = row_number() over(order by number asc),
data1 = sd.one,
data2 = sd.two
from someDb
) sd
inner join (values
('@p1',@p1),
('@p2',@p2),
('@p3',@p3)
) v([table],json) on JSON_VALUE(v.json, '$[0].i') = sd.norow
如果您想要完整的 JSON,那么您可以将选择列表中的 v.[table]
更改为 v.json
如果您想要 JSON 中的 n
值,那么您需要这个:
[table] = JSON_VALUE(v.json, '$[0].n')
如果您有很多这些参数,您可能需要考虑使用表值参数。
【讨论】:
以上是关于如何将变量连接到特定行的主要内容,如果未能解决你的问题,请参考以下文章