在其他SELECT中使用SELECT结果作为COLUMN名称

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

我现在想要连接_PRICEBRAND_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)

Dav*_*idG 9

您不需要动态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)


Pரத*_*ீப் 6

我想你需要一个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)