【问题标题】:Concatenate string with real table SQL SERVER将字符串与真实表 SQL SERVER 连接起来
【发布时间】:2014-03-07 18:54:16
【问题描述】:

每个人 我在 SQL SERVER 中有这个查询

declare @nivel AS INT

set @nivel =3

SELECT * FROM TABLE1 AS A inner join TABLE2 as B ON A.COL1 = b.COL + @NIVEL

我想连接一个变量 A.COL1 = b.COL3
不转换 '' STRING 中的所有查询

【问题讨论】:

  • 表 1 为 b,表 2 为 B?
  • A.Col1 和 b.Col 的数据类型是什么?

标签: sql sql-server string concat


【解决方案1】:

试试这个

select * 
  from Table1 a
       join Table2 b on a.Col1=case @nivel
                                   when 1 then b.Col1
                                   when 2 then b.Col2
                                   when 3 then b.Col3
                                   ...
                                 end

但是,这是非常糟糕的设计。您应该考虑重新设计您的 Table2 以包含类似

| ColNo | ColumnData
|   1   | Data of column 1
|   2   | Data of column 2
|   3   | Data of column 3

那么你的查询会更直接

select * 
  from Table1 a
       join Table2 b
         on a.Col1 = b.ColumnData 
        and b.ColNo = @nivel

【讨论】:

  • 是的,是一个糟糕的设计,但不能修改
【解决方案2】:

试试:

declare @nivel AS INT

set @nivel =3

SELECT * FROM TABLE1 AS A 
inner join TABLE2 as B ON A.COL1 = b.COL + CAST(@NIVEL AS CHAR)

【讨论】:

  • 无效的列名 B.COL
  • 写下你的实际列名。
  • 无论如何它都行不通。 A.Col1 将是列中的任何内容 B.COL 与数字连接。但问题是如何根据索引@nivel 与不同的列(col1、col2、col3...)进行比较。类似于数组的索引。
猜你喜欢
  • 2013-11-01
  • 2011-02-24
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多