Ped*_*iro 9 sql sql-server sql-server-2012
是否可以使用select的结果作为字符串与其他select中的列名中的另一个字符串连接?
例:
SELECT brand
FROM articles a
WHERE a.id='12345678'
Run Code Online (Sandbox Code Playgroud)
结果: BRAND_A
我现在想要连接_PRICE到BRAND_A......
SELECT (
SELECT brand
FROM articles a
WHERE a.id = '12345678'
) + "_PRICE"
FROM prices p
WHERE p.id = '12345678'
Run Code Online (Sandbox Code Playgroud)
...实际检索:
SELECT BRAND_A_PRICE
FROM prices p
WHERE p.id = '12345678'
Run Code Online (Sandbox Code Playgroud)
您不需要动态SQL来执行此操作(如果可能的话,应该避免使用动态SQL).相反,您可以使用CASE语句.您可以使用单个语句执行此操作,但我将其拆分出来用于显示目的:
DECLARE @brand VARCHAR(100) = (SELECT brand FROM articles a WHERE a.id='12345678')
SELECT CASE @brand
WHEN 'BRAND_A' THEN BRAND_A_PRICE
WHEN 'BRAND_B' THEN BRAND_B_PRICE
WHEN 'BRAND_C' THEN BRAND_C_PRICE
ELSE 0 END AS PRICE
FROM prices
WHERE id='12345678'
Run Code Online (Sandbox Code Playgroud)
我想你需要一个Dynamic SQL query.
首先将Brand特定存储ID在变量中,然后使用Dynamic Query附加的变量_PRICE来获取结果.
DECLARE @sql NVARCHAR(max),
@brand VARCHAR(500)
DECLARE @sql NVARCHAR(max),
@brand VARCHAR(500)
SELECT @brand = brand
FROM articles a
WHERE a.id = '12345678'
SET @sql ='SELECT ' + @brand + '_PRICE FROM prices p WHERE p.id=''12345678'''
EXEC Sp_executesql @sql
Run Code Online (Sandbox Code Playgroud)