根据条件创建动态SQL Select

时间:2019-07-18 09:27:09

标签: sql-server tsql dynamic-sql

仅当满足某些条件时,才如何选择特定列?

我有一个#Pricelist_1 temp表。 如果Price_list ='MY1'具有[Original Cost]列,则此[Original cost]列不存在。

仅在[Original cost]时如何执行动态SQL来选择此Price_list='MY1'

尝试使用IIF,但不起作用。

IIF (a.Price_List='MY1',[Original Cost],'')

SQL将引发一个错误,当我使用[Original Cost]运行时找不到列Price_list <> 'MY1'

SELECT 
a.[Price_List],
a.[Price1],
a.[Price2],
a.[Price3],
IIF (a.Price_List='MY1',[Original Cost],'') --- If price_List='MY1' I want to select column [Original Cost] else I don't want to select this column.

INTO #A
FROM #Pricelist a (nolock)
LEFT JOIN #Premium p (nolock) ON a.[Product Group] = p.[Product Group] AND a.[Brand No] = p.[Brand No]

非常感谢您。

1 个答案:

答案 0 :(得分:0)

您不需要动态SQL。您可以使用case语句。我认为,您可以从这里拿走它。

SELECT 
a.[Price_List],
a.[Price1],
a.[Price2],
a.[Price3],
CASE WHEN a.price_List = 'MY1' THEN (SELECT TOP 1 [Original Cost] FROM #Pricelist WHERE.... (your filtering condition)) 
ELSE NULL END 

INTO #A
FROM #Pricelist a (nolock)
LEFT JOIN #Premium p (nolock) ON a.[Product Group] = p.[Product Group] AND a.[Brand No] = p.[Brand No]