我有一个存储过程,它将@Table1.ColumnName
(列的名称)作为输入参数。这是存储过程中的查询:
select data
from Table1
case @Table1.ColumnName = 'Table1.column1'
THEN LEFT JOIN Table2 (on Table1.column1 = Table2.column1)
case @Table1.ColumnName = 'Table1.column2'
THEN LEFT JOIN Table2
(on Table1.column2 = Table2.column1)
我需要通过检查输入参数@Table1.ColumnName
在存储过程中进行左连接。我需要改变连接中的ON
条件。
我不确定语法。任何人都可以帮我写一个带有大小写条件的左连接。
答案 0 :(得分:2)
由于@ table1.column1变量不匹配,所以你不能做两个左连接,你知道你只会在其中一个中获得结果。并且您始终可以合并结果,以便从t2,t3获得非空值(下面的col1示例)
ssh
否则我相信你必须使用动态SQL来完成你所追求的目标。
或者我想你可以将结果空白结果......
SELECT t1.*, coalesce(t1.column1, t2.column1) as Col1
FROM Table1 t1
LEFT JOIN table2 t2
on T1.column1 = t2.column1
and @table1.column1 = 'Table1.column1'
LEFT JOIN table3 t3
on T1.column2 = t3.column1
and @table1.column2 = 'Table1.column2'
答案 1 :(得分:2)
您可以使用动态sql:
declare @sql nvarchar(max);
set @sql = '
select data
from Table1
left join Table2
on Table2.column1 = ';
if @Table1.ColumnName = 'Table1.column1'
begin;
set @sql = @sql + 'Table1.column1';
end;
if @Table1.ColumnName = 'Table1.column2'
begin;
set @sql = @sql + 'Table1.column2';
end;
exec sp_executesql @sql;
参考:
答案 2 :(得分:0)
您可以尝试这样的事情。
SELECT data
FROM Table1
LEFT JOIN Table2 ON
@Table1.ColumnName = 'Table1.column1'
AND Table1.column1 = Table2.column1
LEFT JOIN Table2 ON
@Table1.ColumnName = 'Table1.column2'
AND Table1.column2 = Table2.column1
答案 3 :(得分:0)
根据参数@ColName
尝试此代码,您将使用不同的连接条件
declare @ColName int = 'FieldNameHere'
select *
from Table1
left join Table2
on (Table1.column1 = Table2.column1 and @ColName = 'FieldNameHere')
or (Table1.column2 = Table2.column2 and @ColName <> 'FieldNameHere')