0

假设我有 2 个表 FOO 和 BAR,如下所示,如果您知道列名作为基于 BAR 表连接的字符串,是否可以对 FOO 使用一种反射?

SELECT DB, FOO.Name, FOO.Type, BAR.Field, I.DATA_TYPE AS FType, FOO.**<BAR.FIELD>** AS Value
FROM INFORMATION_SCHEMA.COLUMNS AS I  
inner JOIN BAR ON I.COLUMN_NAME = BAR.Field
inner JOIN FOO ON FOO.TYPE = BAR.TYPE
WHERE DB = 4 AND FLAG = 1

即对于每个选定的行,FOO。需要更改以反映 FOO 中匹配列的值,即如果一行有 BAR {4, AC1, LO} 和 FOO { 4, AC1, LO, COL1} 我希望选择 1 的值。

我知道我可能可以这样做 2 轮并合并数据,但是我想知道是否有人会知道一种方法可以在 1 次中更有效地执行此操作,从而节省代码路径。

我应该补充一下,我通常在每个表中都有大约 60 列,它们是非常随机的,即我不能假设 col1、2 或 3 存在,我只能通过等效的 BAR 表中的内容。

福:

+--------+--------+---------+---------+--------+-------+
|   DB   | Name   | Type    | Col1    |  Col2  | Col3  |
+--------+--------+---------+---------+--------+-------+
|   4    | AC1    | LO      | 1       |  10    | 2     |
|   4    | AC1    | HI      | 2       |  20    | 4     |
|   1    | DC2    | HI-HI   | 11      |  5     | 2     |
|   1    | DC2    | HI      | 22      |  10    | 4     |
|   1    | DC2    | LO      | 33      |  15    | 6     |
+--------+--------+---------+---------+--------+-------+

酒吧:

+--------+--------+---------+---------+--------+
|   DB   | Name   | Type    | Field   |  Flag  |
+--------+--------+---------+---------+--------+
|   4    | AC1    | LO      | Col1    |  1     |
|   4    | AC1    | HI      | Col1    |  1     |
|   1    | DC2    | HI-HI   | Col1    |  1     |
|   1    | DC2    | HI      | Col1    |  1     |
|   1    | DC2    | LO      | Col1    |  1     |
|   4    | AC1    | LO      | Col2    |  0     |
|   4    | AC1    | HI      | Col2    |  0     |
|   1    | DC2    | LO      | Col2    |  0     |
|   1    | DC2    | HI-HI   | Col2    |  0     |
|   1    | DC2    | HI      | Col2    |  0     |
|   4    | AC1    | LO      | Col3    |  0     |
|   4    | AC1    | HI      | Col3    |  0     |
|   1    | DC2    | LO      | Col3    |  0     |
|   1    | DC2    | HI-HI   | Col3    |  0     |
|   1    | DC2    | HI      | Col3    |  0     |
+--------+--------+---------+---------+--------+

结果:

+--------+--------+---------+---------+--------+--------+
|   DB   | Name   | Type    | Field   |  FTYPE |  VALUE |
+--------+--------+---------+---------+--------+--------+
|   4    | AC1    | LO      | Col1    |  float |  1     |
|   4    | AC1    | HI      | Col1    |  float |  2     |
|   4    | AC1    | LO      | Col2    |  float |  10    |
|   4    | AC1    | HI      | Col2    |  float |  20    |
|   4    | AC1    | LO      | Col3    |  float |  2     |
|   4    | AC1    | HI      | Col3    |  float |  4     |
+--------+--------+---------+---------+--------+--------+
4

0 回答 0